Быстро удалить отчёт.
Вы хотели бы иметь иметь возможность удалять сообешие в Травиане не переходя к списку? Примерно вот так.
Для этого прекрассного чуда надо установить FireFox и GreaseMonkey.
А сам скрипт можете скачать по этому линку http://krolser.com/greasemonkey/scripts/travian/message.user.js.
Если вам интересно, как это написано, то можете читать эту статью дальше.
Давайте разберемся, по какому линку нам надо пойти, чтобы удалить сообщение. Для этого идём на страничку http://<ваш сервер>.travian.ru/berichte.php (я играю на speed) и смотрим исходный код этой страницы. Нас инетересует отправка данных по клику на кнопку “Удалить”. Ищем в исходном коде это волшебное слово и находим строчку.
<input class=“std” name=“del” type=“Submit” value=“Удалить”>
Т.к. у нас это кнопка, значит должна быть и форма. (Если вам непонятно про что я говорю, то вам следует поучить HTML). Ищем тэг <form>. Находит только одну.
<form method=“post” action=“berichte.php” name=“msg”>
Хм. а как же тогда сервер узнаёт какие месаги удалять, а просто. Есть же чекбоксы.
<input type=“Checkbox” name=“n1″ value=“28174557″>
<input type=“Checkbox” name=“n2″ value=“28115395″>
Честно сказать меня напугало, что у них имена разные-то. Или это программисты травиана не знали как работать с целой пачкой или есть какая-то хитрая защита? Параметр value, как вы наверное уже догадались и есть id нашего сообщения.
ВНИМАНИЕ ! : у вас параметры value будут оличаться от моих, ведь у вас то другие сообщения. ![]()
После нехитрых рассуждений прихожим к выводу, что нам на страничку нужно добавить что-то типа такого.
<form method="post" action="berichte.php" name="msg">
<input type="Checkbox" name="n1" value="27801824">
<input class="std" name="del" type="Submit" value="Удалить">
</form>
Давай те попробуем протестировать. Для этого открывает блокнот, вставляем следующий код и сохраняем.
<form method="post" action="http://speed.travian.ru/berichte.php” name=”msg”>
<input type=”Checkbox” name=”n1″ value=”27801824″>
<input class=”std” name=”del” type=”Submit” value=”Удалить”>
</form>
Отличие в параметре action (выделено красным) тэга <form> связвно с тем, что мы будем тестировать на локальном компьютере. И так. Сохранили, запустили, выделили, нажали кнопку…. И попали на список сообщений, но сообщения с id равным тестовому не наблюдаеться. Значит у нас всё получилось. Теперь давайте у берем эту галоку. Зачем пользователю что-то убирать, если он и так будет на странице с сообщением которое надо удалить. Пишем что-то подобное:
<form method="post" action="http://speed.travian.ru/berichte.php" name="msg">
<input type="hidden” name=”n1″ value=”28286263“>
<input class=”std” name=”del” type=”Submit” value=”Удалить”>
</form>
Внимательно смотрим, что поменялось. Во превых сменился value. Предыдущее сообщение мы уже удалили, надо удалять теперь другое, а также type — теперь вместо галочки мы ничего не видим.
Опять тестируем. Опа!! Работает. Как я рад, как я рад, что поеду в ленинград. Сорри, отвлёкся… ![]()
Осталось только втроить эту кнопку в страничку сообщения.
Идем на страничку сообщения и смотрим ей исходный код. Блин, а параметра value у нас тут нету….Но он есть в адресной строке.
http://speed.travian.ru/berichte.php?id=27855656
Как его оттуда достать, то? Легко. Весь URL в JavaScript можно посмотреть с помощью
window.location.href
А теперь, осталось вырезать из этого наш параметр. Хм, очень не хочеться думать, поэтому лезем и google и берем первый линк http://www.netlobo.com/url_query_string_javascript.htm и хестоко крадём оттуда следующий код:
function gup( name ) { name = name.replace(/[\[]/,”\\\[“).replace(/[\]]/,”\\\]“); var regexS = “[\\?&]“+name+“=([^&#]*)“; var regex = new RegExp( regexS ); var results = regex.exec( window.location.href ); if( results == null ) return “”; else return results[1]; }
Теперь в нашем скрипте достаточно вызвать что-типа такого
var value = gup( 'id' );
Давайте теперь просто попытаемся вставить это в нашу страничку. Осталось только придумать куда. Идем вмануал по GreaseMokey находим там раздел “Inserting complex HTML quickly”. Там написано примерно следующее:
var logo = document.createElement("div");
logo.innerHTML = '<div style="margin: 0 auto 0 auto; ' +
'border−bottom: 1px solid #000000; margin−bottom: 5px; ' +
'font−size: small; background−color: #000000; ' +
'color: #ffffff;"><p style="margin: 2px 0 1px 0;"> ' +
'YOUR TEXT HERE ' +
'</p></div>';
document.body.insertBefore(logo, document.body.firstChild);
После исплнения этого в верхнем углу должен появиться банер с надписью YOUR TEXT HERE. Давате поменяем вставляемый HTML на наш. Получим:
var value = gup( 'id' );
var logo = document.createElement("form");
logo.innerHTML =
'<form method="post" action="http://speed.travian.ru/berichte.php" name="msg">' +
' <input type="hidden" name="n1" value="' + value + '">' +
' <input class="std" name="del" type="Submit" value="Удалить">' +
'</form>';
document.body.insertBefore(logo, document.body.firstChild);
Устанавливаем скрип и тестируем…. Блин… Вместо слово удалить одни кубики. Проблемы с кодировкой. Давайте напишем просто “Delete”, а уже потом исправим на правильное “Удалить” в кодировке UFT-8.
Проверяем. Работает. но кнопка в верху страницы — это неудобно. Попробуем поставить её ппосле сообщения.
Опять роем исходник страницы сообщения. Экспериментируем….
Вот оканчательный вариант скрипта.
Если есть еще что-то непонятное, милости просим в коменты.
Всё…. Устал. Конец. ![]()