4

Addon SDK (Jetpack) を使用して、Google Chrome 拡張機能を Firefox に変換しようとしています。次のコード (コンテンツ スクリプトとして実行)

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 の「Web コンソール」で同じまたは類似のステートメントを実行すると、正常に動作します。

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

1 に答える 1

1

[テスト] ボタンからインストールしてから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");'
    });
};
于 2011-09-03T20:53:16.147 に答える