>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Greasemonkey: Странное поведение GM_getValue http://forum.mozilla-russia.org/viewtopic.php?id=44896 |
TheDeadOne > 20-06-2010 10:25:56 |
При вызове GM_getValue из обработчика события (DOMSubtreeModified), она выдают undefined, независимо от того, установленная ли переменная и задан ли параметр по умолчанию. Никто не сталкивался? |
Infocatcher > 20-06-2010 18:39:37 |
Выделить код Код:GM_setValue("test", 0); alert(GM_getValue("test")); // Ok window.addEventListener("DOMSubtreeModified", function(e) { window.removeEventListener(e.type, arguments.callee, false); alert(GM_getValue("test")); // Ошибка: Greasemonkey access violation: unsafeWindow cannot call GM_getValue. }, false); \components\greasemonkey.js: Выделить код Код:// Examines the stack to determine if an API should be callable. function GM_apiLeakCheck(apiName) { var stack = Components.stack; do { // Valid stack frames for GM api calls are: native and js when coming from // chrome:// URLs and the greasemonkey.js component's file:// URL. if (2 == stack.language) { // NOTE: In FF 2.0.0.0, I saw that stack.filename can be null for JS/XPCOM // services. This didn't happen in FF 2.0.0.11; I'm not sure when it // changed. if (stack.filename != null && stack.filename != gmSvcFilename && stack.filename.substr(0, 6) != "chrome") { GM_logError(new Error("Greasemonkey access violation: unsafeWindow " + "cannot call " + apiName + ".")); return false; } } stack = stack.caller; } while (stack); return true; } Если коротко, то почему-то для обработчика DOMSubtreeModified в стеке оказывается что-то не то. Для click, например, все нормально. |
TheDeadOne > 20-06-2010 19:00:20 |
Можно ли это как-то обойти? Первое, что приходит в голову, выгребать установленные значения в глобальный массив и работать в обработчике с ним. Но метод далек от красоты. |
Infocatcher > 20-06-2010 19:27:01 |
Есть смысл написать автору Greasemonkey. Хотя это больше похоже на баг Firefox. То есть с Greasemonkey все понятно – там идет проверка, что API-функции запускаются из GM-скрипта. Не понятно только, что происходит со стеком. Кроме как предварительным чтением настроек без исправления причины бага, вроде бы, проблему не решить. |
TheDeadOne > 21-06-2010 09:06:24 |
Infocatcher пишет
Что-то похожее есть у них в bug-трекере: http://github.com/greasemonkey/greasemonkey/issuesearch?state=open&q=DOMSubtreeModified#issue/1001 Infocatcher пишет
Кому писать? На этот же форум? Infocatcher пишет
Придётся изворачиваться. |
Infocatcher > 21-06-2010 21:43:19 |
TheDeadOne пишет
Раз уж
, то, в принципе, можно никому и не писать. Если только не придумается более корректно работающая замена для GM_apiLeakCheck(). |