2012-12-03 4 views
8

コンテンツスクリプトでjQuery/Zeptoを使用するクロムエクステンションを開発しています。現在、この拡張機能はすべてのWebサイトで実行されるようになっています。つまり、ユーザーが開く各タブにjQuery/Zeptoのコピーがロードされます。chrome extension:コンテンツスクリプトとバックグラウンドスクリプトの間でオブジェクトを共有する

さまざまなコンテンツスクリプト間でjQuery/Zeptoオブジェクトを共有する方法はありますか?

コンテンツスクリプトがバックグラウンドスクリプトと通信できることはわかっています。バックグラウンドスクリプトにjQueryオブジェクトへのアクセス権を与え、そこへの参照を各コンテンツスクリプトに返すことができるようにしたいと考えていました。しかし、私は、コンテンツとバックグラウンドスクリプトの間でJSONメッセージだけを渡すことができることを認識しました。

私が欲しいものを達成する方法はありますか? Content Scripts

+0

いいえ、コンテンツスクリプト間で直接関数参照を共有することはできません。 (重複する質問:[2つの異なるタブのコンテンツスクリプト間でデータを転送する方法は?](http://stackoverflow.com/questions/11597416/how-to-transfer-data-between-thecontent-scripts-of- 2つの異なるタブ))。 –

+0

これを回答として投稿していただければ幸いです。 Btw、質問 - 私は昨日、Webページの実際のリソースとは異なり、ダウンロードする必要がないため、すべてのページにjQueryを含めることは実際問題ではないかもしれないと考えました。ウェブページの平均サイズが1MBに近づいているので(私がオンラインで読むと)、メモリ消費量の増加は、私が推論した問題のようなものではないはずです。それは理にかなっているようですか? –

答えて

9

コンテンツのスクリプトがどちらかの互いのJavaScriptオブジェクトへのアクセスを持っていない手の込んだしてください。

クロムは、chrome.runtime.sendMessage + .onMessageで、コンテンツスクリプトとバックグラウンドページの間の通信をサポートしています。すべてのメッセージがJSONシリアル化されているため、JavaScriptオブジェクトはこのようにして他のコンテキストに "リーク"することはできません。

So:いいえ、jQueryなどのオブジェクトを他のタブの(コンテンツスクリプト)と共有することはできません。

1

Execution environmentコンテンツスクリプト自体の中

例に通信できることを確認:性を保証注射["myscript.js","myscript1.js"]コンテンツ・スクリプトは、すべてのコンテンツへのアクセス(関数、変数)を有するmyscript1.js

"content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["myscript.js","myscript1.js"] 
    } 
    ] 
} 

Individual DOM Environmentmyscript.jsのですが、これは通信中の2つのIndividual DOM Environmentから停止します。

は、あなたが message passingニーズ background pagesDOM of injected pagesにアクセスするための要件を求めて Content Scriptsには何の制限\要件を参照することを言いましたか?

異なるタブで

関連する問題