#variables #greasemonkey #storage
#переменные #greasemonkey #Хранение
Вопрос:
В настоящее время у меня возникла проблема на мобильном сайте, который я запускаю непосредственно в браузере Firefox на моем ПК. Каждый раз, когда нажимается кнопка, страница перезагружается, тем самым сбрасывая мои переменные. У меня есть этот скрипт:
// ==UserScript==
// @name trada.net autoclick 55_1min_mobile
// @namespace airtimeauction auto click
// @include http://www.trada.net/Mobile/
// @version 0.1
// @description Automatically click // ==/UserScript==
var interval = 57000;
var bidClickTimer = setInterval (function() {BidClick (); }, interval);
var numBidClicks = 0;
function BidClick ()
{var bidBtn1=document.getElementById("ctl00_mainContentPlaceholder_AirtimeAuctionItem7_btn_bidNow");
numBidClicks ;
if (numBidClicks > 500)
{
clearInterval (bidClickTimer);
bidClickTimer = "";
}
else
{
bidBtn1.click (1);
}
};
BidClick();
Он должен нажимать кнопку каждые 57 секунд, но в тот момент, когда он нажимает на кнопку, страница перезагружается, тем самым сбрасывая переменные. Как я могу заставить greasemonkey «запомнить» или перенести переменные на следующую страницу / скрипт при перезагрузке? Будет ли это как-то связано с GM_setValue? Это будет всего лишь несколько переменных, но вторая проблема или вопрос будет заключаться в том, вычтет ли это несколько секунд, которые требуются странице для перезагрузки, из «57» секунд? Как мне это компенсировать?
Комментарии:
1. В показанном здесь коде удалите последний вызов
BidClick();
. Это то, что вызывает проблему «щелчок перед интервалом», упомянутую в вашем комментарии (по другому вопросу).2. Есть ли какая-либо разница между первым URL (который вы загружаете) и последующими URL (которые загружаются щелчком мыши)? Какие-нибудь подробности вообще?
3. @ brock. Да, есть некоторые детали, которые изменятся. Этот код является только примером. в том, который я хочу запустить, есть еще 2 таймера. Если, например, аукцион по R1100 завершен, кнопка «сделать ставку сейчас» недоступна до тех пор, пока вы не обновите, поэтому программа должна: 1. обновить страницу, чтобы она снова открывалась через 3 минуты; 2. перезапустить 1-минутный процесс v clicking через 2 часа, который перенаправит вас сначала на страницу входа, а затем снова на эту. trada.net/Mobile/p_Mobile_Home.aspx
Ответ №1:
В дополнение к GM_setValue… вы также можете использовать новый объект Javascript «localStorage» или SQL Javascript API.
Преимущество подхода SQL заключается в том, что он очень мало потребляет ресурсов в скрипте (подумайте об этом; вместо того, чтобы объединять огромную строку результатов, вы можете убрать каждый результат и при необходимости вызвать его с помощью точного запроса. Недостатком является то, что вам нужно настроить SQL Server, но использовать что-то вроде SQLite в наши дни не имеет большого значения. Даже postgres или mysql можно быстро запустить на ноутбуке…
Ответ №2:
Да, я думаю, вам нужно использовать GM_setValue
/ GM_getValue
.
И если вам нужно что-то делать ровно каждые 57 секунд, то рассчитайте время, когда должно произойти следующее действие после перезагрузки, и сохраните его с помощью GM_setValue
. При запуске вашего скрипта сначала прочитайте, сохранено ли следующее действие, если оно сохранено, используйте это время для планирования следующего действия и рассчитайте время для действия после этого и так далее…
Ответ №3:
GM.setValue
установит значение на неопределенный срок и ограничит область действия скрипта, но будет работать, если ваш скрипт выполняется в нескольких доменах.
window.localStorage
устанавливает значение на неопределенный срок и ограничивается областью действия домена страницы, поэтому не будет работать в разных доменах, но будет работать, если вам нужно несколько скриптов GreaseMonkey для доступа к одному и тому же значению.
window.sessionStorage
установит значение только тогда, когда окно или вкладка открыты, и область действия будет ограничена только этим окном или вкладкой для этого домена.
document.cookie
можно задавать значение бесконечно или только во время работы браузера, и его область действия может охватывать поддомены, или отдельный домен, или путь, или отдельную страницу.
Это основные механизмы на стороне клиента для хранения значений при загрузке страницы, которые предназначены для этой цели. Однако есть другой метод, который иногда возможен (если сама страница его не использует), а также может быть весьма полезен; window.name
.
window.name
область действия ограничена окном или вкладкой, но будет работать и в разных доменах. Если вам нужно сохранить несколько значений, то их можно поместить в объект, и вы можете сохранить строку JSON объекта. Например. window.name = JSON.stringify(obj)