Страницы: 1
При вызове GM_getValue из обработчика события (DOMSubtreeModified), она выдают undefined, независимо от того, установленная ли переменная и задан ли параметр по умолчанию. Никто не сталкивался?
Один гриф, за свою жизнь, может съесть три поколения львов.
Отсутствует
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, например, все нормально.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Можно ли это как-то обойти? Первое, что приходит в голову, выгребать установленные значения в глобальный массив и работать в обработчике с ним. Но метод далек от красоты.
Один гриф, за свою жизнь, может съесть три поколения львов.
Отсутствует
Есть смысл написать автору Greasemonkey. Хотя это больше похоже на баг Firefox.
То есть с Greasemonkey все понятно – там идет проверка, что API-функции запускаются из GM-скрипта. Не понятно только, что происходит со стеком.
Кроме как предварительным чтением настроек без исправления причины бага, вроде бы, проблему не решить.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Есть смысл написать автору Greasemonkey.
Что-то похожее есть у них в bug-трекере: http://github.com/greasemonkey/greasemonkey/issuesearch?state=open&q=DOMSubtreeModified#issue/1001
Хотя это больше похоже на баг Firefox.То есть с Greasemonkey все понятно – там идет проверка, что API-функции запускаются из GM-скрипта. Не понятно только, что происходит со стеком.
Кому писать? На этот же форум?
Кроме как предварительным чтением настроек без исправления причины бага, вроде бы, проблему не решить.
Придётся изворачиваться.
Один гриф, за свою жизнь, может съесть три поколения львов.
Отсутствует
Кому писать? На этот же форум?
Раз уж
Что-то похожее есть у них в bug-трекере
, то, в принципе, можно никому и не писать. Если только не придумается более корректно работающая замена для GM_apiLeakCheck().
Или нужно убедить авторов Firefox в важности добавления возможности отслеживания таких вот хитрых вызовов.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1