1

コンテンツスクリプトを使用してウェブサイトにdivを挿入するChrome拡張機能を作成しています。コンテンツスクリプトは、manifest.jsonファイルでクリアしたWebサイトにAJAXリクエストを送信し、innerHTMLを使用してデータをdivに挿入します。AJAXリクエストが返すものの一部は、実行する必要のあるjavascriptです。コンテンツスクリプト内からのAJAXリクエストは正常に機能します。

通常のウェブサイトから同じAJAXリクエストを行うと、返されるjavascriptは問題なく実行されますが、コンテンツスクリプトからAJAXリクエストを行うと、実行されません。コンソールにエラーは表示されません。可能であれば、ウェブサイトをリロードしたくありません。

これはセキュリティの「機能」であり、バグではないと思います。この動作をオフまたは回避するにはどうすればよいですか?

4

1 に答える 1

0

まず、Rob Wが言ったことは非常に重要です。まだ知らない場合は、コンテンツスクリプトが実行されるさまざまな環境についての適切な説明が役立ちます。

あなたはこれをチェックしたいかもしれません。それはあなたが探しているものの100%ではありませんが、主要な部分はそこにあります。基本的に、バックグラウンドページから(まだ作成していない場合)、chrome.tabs.executeScript()を使用してダウンロードしたスクリプトを実行します。これは、「コンテンツスクリプト」コンテキストではなく、実際のページコンテキストでjavascriptを実行します。ここで必要なのは、そのスクリプトを(文字列形式で)バックグラウンドページに移動し、(送信者タブから)実行するtabIdを決定することだけです。

chrome.extension.sendMessageを使用してバックグラウンドページに送信し、background.jsでchrome.extension.onMessageを使用してスクリプトとともにメッセージを受信できます。そこからsender引数を使用してtabId(sender.tab.id)を取得し、executeScript呼び出しを作成します。

もう1つの役立つヒントとして、Chromeのページスクリプト(動的なJavaScriptの実行)は、デフォルトではChromeデバッガーに設定された方法で表示されませんが、JavaScriptの文字列に次のようなものを追加できます。 "\n//@ sourceURL=/myFolder/myDynamicJavascript.js"

これにより、このスクリプトは常にchromeデバッガーの「/myFolder/myDynamicJavascript.js」パスとともに表示され、挿入したjsコードにブレークポイントを設定できるようになります。それは命の恩人です。

于 2012-12-20T22:00:53.600 に答える