При вызове 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-скрипта. Не понятно только, что происходит со стеком.

Кроме как предварительным чтением настроек без исправления причины бага, вроде бы, проблему не решить. =/

Infocatcher пишет

Есть смысл написать автору Greasemonkey.

Что-то похожее есть у них в bug-трекере: http://github.com/greasemonkey/greasemonkey/issuesearch?state=open&q=DOMSubtreeModified#issue/1001

Infocatcher пишет

Хотя это больше похоже на баг Firefox.То есть с Greasemonkey все понятно – там идет проверка, что API-функции запускаются из GM-скрипта. Не понятно только, что происходит со стеком.

Кому писать? На этот же форум?

Infocatcher пишет

Кроме как предварительным чтением настроек без исправления причины бага, вроде бы, проблему не решить.

Придётся изворачиваться.

TheDeadOne пишет

Кому писать? На этот же форум?

Раз уж

Что-то похожее есть у них в bug-трекере

, то, в принципе, можно никому и не писать. Если только не придумается более корректно работающая замена для GM_apiLeakCheck().
Или нужно убедить авторов Firefox в важности добавления возможности отслеживания таких вот хитрых вызовов.