2

クロム

NPAPI プラグインと通信するためにすべてbackground.htmlを使用する複数の html ページを持つ (chrome.* API と Cross-Origin Requests を使用することを除いて) Web アプリのように動作する Chrome 拡張機能があります。

拡張機能の構造 (拡張機能のルートから) は次のとおりです。

  • background.html
  • plugin/ (NPAPI プラグイン バンドル)
  • フロントエンド/
    • main.html
    • foo.html
    • bar.html
    • ..

拡張機能のインストール時に background.html が読み込まれ、NPAPI プラグインが読み込まれ、無期限に実行されます (ブラウザーが閉じるか、拡張機能が非アクティブ化/削除されるまで)。

拡張機能のツールバー ボタンをクリックすると、main.htmlが開き、他のページ foo.html および bar.html にアクセスするための UI ナビゲーションが提供されます。

これらのページのいずれかを使用chrome.extension.getBackgroundPage()して、NPAPI プラグインのメソッドを呼び出し、応答を同期的に受信します。


ファイアフォックス

バックグラウンド NPAPI プラグインに関しては、これは以前の私の質問ですでに回答されています。

現在のアドオン SDK で利用可能なオプションから、Firefox はメッセージの受け渡しを JSON シリアライズ可能な値に制限しているため、NPAPI プラグイン メソッドを直接呼び出すことができなくなりました (プラグインの戻り値を渡すことで解決しました)。

残りの問題は、フロントエンド アプリ ページに関するものです。これはローカルであり、信頼できるスクリプトである必要があります。それらをPanelsとしてロードすることを実験しましたが、 Panels は完全な UI ページには適していないように見えますが、情報の小さな断片には適していないようです。

プログラムですべてのページに page-mod contentscript を挿入せずにこれらのページをロードする方法はありますか? (これには、ページ ナビゲーション時に新しいスクリプトを挿入する必要もあります)。

4

1 に答える 1

1

CSSOMデータ URIを使用して、ページをプログラムで読み込みます。

var foo = btoa("<script>x=new XMLHttpRequest();x.open(\u0022GET\u0022,\u0022http://xssme.html5sec.org/xssme2/\u0022,true);x.onload=function() { alert(x.responseText.match(/document.cookie = '(.*?)'/)[1])};x.send(null);</script>")

var bar = atob(foo);

var baz ='data:text/html;' + foo;

var stylesheet = document.styleSheets[0].cssRules;

stylesheet.insertRule("body { background-image: url( " + baz + " ); }", stylesheet.length - 1);

参考文献

于 2013-12-05T02:30:23.770 に答える