4


ユーザーが訪れる特定のページに機能を追加するChrome拡張機能を作成しています。
これを行うには、ページが呼び出すことができる必要があるいくつかの変数と関数を注入する必要があります。
これらの変数/関数は、コンテンツスクリプトで生成されます。クロムエクステンションからページを呼び出す関数/変数を挿入する

ただし、コンテンツスクリプトは隔離された環境で実行されるため、ホストページはコンテンツページにアクセスできません。

この記事によると: http://code.google.com/chrome/extensions/content_scripts.html#host-page-communication コンテンツスクリプトとホストページは、イベントを追加することでDOMを介して通信することができます。
これは恐ろしいことですが、メソッド/変数を簡単に注入する方法を実際に見たいと思っています。

このような可能性はありますか?

ありがとうございます!あなたのmanifest.jsonを上

+3

[クローム拡張を構築するには - コンテンツを使用して、ページにコードを挿入スクリプト](http://stackoverflow.com/questions/9515704/building-a-chrome-extension-inject-code-in-a-page-using-a-content-script)は、変数を注入する方法/ページ内の関数。ただし、メッセージを拡張機能に戻したい場合は、イベントハンドラを回避することはできません。 –

答えて

4

それはまだ誰も興味のなら、私は」メッセージを介してコンテンツスクリプトとページ自体との間で通信するソリューションを発見しました。

送るスクリプトでこのような何か:

window.postMessage({ type: "messageType", params: { param: "value", anotherParam: "value" } }, "*"/*required!*/); 

そして、受信側スクリプトでこのような何か:

window.addEventListener("message", function(event) { 
     // We only accept messages from ourselves 
     if (event.source != window) 
      return; 

     switch (event.data.type) { 
     case "blabla": 
      // do blabla 
      // you can use event.data.params to access the parameters sent from page. 
      break; 
     case "another blabla": 
      // do another blabla 
      break; 
     } 
    }); 
0

ここで、私は私の延長線上に、それをコード化された方法ですhttp://pagexray.com/extension/

"content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["script.js"] 
    } 
], 

あなたscript.jsの

(function(){ 
    var script = document.createElement('script'); 
    script.src = "http://example.com/external.js"; 
    script.addEventListener('load', function() { }); 
    document.head.appendChild(script); 
})(); 
+0

これは本当に私の質問に答えるものではありません。 JSファイルは拡張子の中にあり、http:// urlではありません。 – Svarog

関連する問題