Greasemonkey & глобальные переменные - PullRequest
5 голосов
/ 24 июля 2010

Я нуб с JavaScript и Greasemonkey, и я хотел бы написать простой скрипт.

Я знаю, что Greasemonkey оборачивает ваш код анонимной функцией, чтобы ваши переменные не существовали после ухода с текущей страницы. Однако мне нужна глобальная переменная. Я пытался использовать unsafeWindow и оконные объекты примерно так:

if (window.myVar == undefined) {
   window.myVar = "myVar";
}

Если я обновляю страницу, значение условия всегда будет истинным.

Есть ли способ использовать глобальные переменные с Greasemonkey?

Ответы [ 4 ]

15 голосов
/ 24 июля 2010

Вы должны использовать unsafeWindow , чтобы создать глобальную переменную, доступную для области JavaScript на странице.

if (unsafeWindow.myVar == undefined) {
   unsafeWindow.myVar = "myVar";
}

Но вы не можете ожидать, что эта переменная будет существовать при обновлении страницы, потому что обычный javascript не работает таким образом. Если вы хотите сохранить некоторые данные при загрузке страницы, я предлагаю вам использовать GM_setValue & GM_getValue

4 голосов
/ 24 июля 2010

Вы используете глобальную переменную, но глобальные переменные сохраняются только до тех пор, пока страница делает это, когда вы обновляете, вы очищаете все глобальные переменные. Единственный способ сохранить данные после обновления страницы - это файл cookie, загрузка на сервер или API-хранилище HTML5. С greasemonkey, вероятно, вы захотите использовать cookie.

3 голосов
/ 25 июня 2014

Чтобы установить глобальные переменные в GreaseMonkey, используйте @grant none, в противном случае используется unsafeWindow, который доступен только для GreaseMonkey.Есть некоторые проблемы безопасности.Смотри http://wiki.greasespot.net/@grant

0 голосов
/ 24 июля 2010

Если вы пытаетесь сохранить переменную путем многократного обновления страницы, вам нужно будет сохранить ее в файле cookie.

Однако, если вы просто хотите глобальную переменную в пределах одной страницы:

var imGlobal;
(function(){ // Greasemonkey crap...
...
imGlobal = "Totally";
})();
alert(imGlobal) // Alerts "Totally"
...