Исключение «Компонент недоступен» при переборе свойств объекта окна - PullRequest
4 голосов
/ 13 августа 2011

Я пытаюсь преобразовать расширение Google Chrome в Firefox, используя Addon SDK (Jetpack).Следующий код (запускается как контент-скрипт)

var property, winProperties = {};
for (property in window) {
    winProperties[property] = true;
}

выдает это исключение при запуске в Firefox 5.0 и 6.0:

Traceback (most recent call last):
File "sfc-bgcore.js", line 299, in null
File "resource://jid1-q4cqhvcl3sc4vq-at-jetpack-api-utils-lib/content/content-proxy.js", line 519, in null
for each (name in Object.keys(obj)) {
[Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: 
   resource://jid1-q4cqhvcl3sc4vq-at-jetpack-api-utils-lib/securable-module.js ->
   resource://jid1-q4cqhvcl3sc4vq-at-jetpack-api-utils-lib/content/content-proxy.js ::
   <TOP_LEVEL> :: 
   line 519"  data: no]

Кто-нибудь знает, как перехватить это исключение или какизбежать "проблемного" свойства и продолжить цикл?

Обратите внимание, что я не могу просто поместить оператор try-catch в тело цикла, так как даже это вызывает ошибку:

for (var property in window) {};

Однако, если я выполняю ту же или аналогичную инструкцию в «веб-консоли» Firefox, она работает нормально:

for (var property in window) { console.log(property); };

1 Ответ

1 голос
/ 04 сентября 2011

Я не смог воспроизвести это с расширением тестового набора , установив его с помощью кнопки "Тест" и затем посетив http://example.org/ - на консоль были выведены некоторые свойства, после чего появилось сообщение "готово », без ошибок.

Код теста:

exports.main = function(options, callbacks) {
    var pageMod = require("page-mod");
    pageMod.PageMod({
      include: "*.org",
      contentScript: 'for (property in window) {console.log(property)}; console.log("done");'
    });
};
...