Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№120-06-2010 10:25:56

TheDeadOne
Участник
 
Группа: Members
Откуда: Иркутск
Зарегистрирован: 18-06-2010
Сообщений: 12
UA: Firefox 3.6
Веб-сайт

Greasemonkey: Странное поведение GM_getValue

При вызове GM_getValue из обработчика события (DOMSubtreeModified), она выдают undefined, независимо от того, установленная ли переменная и задан ли параметр по умолчанию. Никто не сталкивался?


Один гриф, за свою жизнь, может съесть три поколения львов.

Отсутствует

 

№220-06-2010 18:39:37

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Greasemonkey: Странное поведение GM_getValue

Выделить код

Код:

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, например, все нормально.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№320-06-2010 19:00:20

TheDeadOne
Участник
 
Группа: Members
Откуда: Иркутск
Зарегистрирован: 18-06-2010
Сообщений: 12
UA: IE 8.0
Веб-сайт

Re: Greasemonkey: Странное поведение GM_getValue

Можно ли это как-то обойти? Первое, что приходит в голову, выгребать установленные значения в глобальный массив и работать в обработчике с ним. Но метод далек от красоты.


Один гриф, за свою жизнь, может съесть три поколения львов.

Отсутствует

 

№420-06-2010 19:27:01

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Greasemonkey: Странное поведение GM_getValue

Есть смысл написать автору Greasemonkey. Хотя это больше похоже на баг Firefox.

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

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№521-06-2010 09:06:24

TheDeadOne
Участник
 
Группа: Members
Откуда: Иркутск
Зарегистрирован: 18-06-2010
Сообщений: 12
UA: Firefox 3.6
Веб-сайт

Re: Greasemonkey: Странное поведение GM_getValue

Infocatcher пишет

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

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

Infocatcher пишет

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

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

Infocatcher пишет

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

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


Один гриф, за свою жизнь, может съесть три поколения львов.

Отсутствует

 

№621-06-2010 21:43:19

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Greasemonkey: Странное поведение GM_getValue

TheDeadOne пишет

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

Раз уж

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

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]