2016-04-10 3 views
1

CSSRule DOM interfaceには、CSSルールの各タイプに対応する定数が含まれています。ルールのタイプは、Firefoxアドオンから読み込んだときにCSSRuleが空白になるのはなぜですか?

someRule.type == CSSRule.STYLE_RULE 

などの文でテストできます。SDKを使用してFirefoxアドオンをビルドします。このアドオンのコンテンツスクリプトファイルから読み取った場合、CSSRuleは存在しますが、空です。

console.log("CSSRule is " + CSSRule); 
for(var key in CSSRule) { 
    console.log('key: ' + key + '\n' + 'value: ' + CSSRule[key]); 
} 
console.log("CSSRule.STYLE_RULE is " + CSSRule.STYLE_RULE); 

出力

CSSRule is [object CSSRule] 
CSSRule.STYLE_RULE is undefined 

ページ内、またはFirefoxコンソールからscriptからそれを実行私は1からCSSRule.STYLE_RULEセットと、期待どおりに、出力されます。

外部コンテンツスクリプトファイルの代わりにpageMod contentScriptから実行する場合、代わりにCSSRule{}です。

CSSRuleの代わりにwindow.CSSRuleを使用してページのロードが完了するまで待ってから、動作を変更しないでください。

私は、Firefox 45.0.1(現在のリリース)でこれをテストしてきたし、今日の毎晩(48.01a 2016年4月10日)、OS X上

なぜCSSRule空のですか?手動で正しい値に設定する以外に、これらの定数にどのようにアクセスできますか?

+0

どのFFバージョンですか?あなたは夜間に試しましたか? – the8472

+0

@ the8472 45.0.1、夜間の同じ動作。質問を編集しました。 – Leopold

+0

が機能する場合は、拡張機能から直接ではなくページ上のスクリプトとしてコードを実行してください。 – dandavis

答えて

3

これはbug 898764です。拡張スクリプトは、コンテンツにxray visionを提供するサンドボックスで実行されます。

つまり、信頼できないWebコンテンツによって定義されたプロパティは表示されませんが、すべてのIDL定義のプロパティと定数の元のインスタンスになるはずです。次のことを当面は潜在的にコンテンツにより変更または削除の回避策として役立つかもしれませんが、値にあなたのコードを公開しますについては

if(!("STYLE_RULE" in CSSRule)) { 
    window.CSSRule = unsafeWindow.CSSRule 
} 

それが動作するかどうか、単にスクリプトとしてあなたのコードを実行します拡張子から直接ではなくページ上に表示されます。 - ダンダビス

これはセキュリティ上の理由から推奨されていません。公開する場合はアドオンレビューに合格しない可能性があります。

+0

'unsafeWindow.CSSRule'は正しい値を持っています。セキュリティ上の理由から、代わりに定数値( 'STYLE_RULE'に' 1'など)を使用します。 – Leopold

+1

[bug 898764](https://bugzilla.mozilla.org/show_bug.cgi?id=898764)によると、CSSRuleはWebIDLの観点から単純に実装されていないため、正しくxrayされません。それが修正されたら、アドオンでも動作するはずです。 – the8472

関連する問題