5

多くの関数を含むコンテンツ スクリプトがあります。これらの関数を他のスクリプトに分割できるようにしたいと考えています。

コンテンツ スクリプトから他のスクリプトを呼び出すために必要な魔法はありますか

私のマニフェストには両方のスクリプトが含まれています

"content_scripts": [
  {
    "matches": [
      "*://*/*"
    ],
    "js": [
      "content.js",
      "other.js"
    ]
  }
]

私のコンテンツスクリプトは正常に動作しています

ただし、関数を other.js ファイルに入れてステップ実行すると、other.js で参照するものはすべて未定義です

ここで知っておくべきことはありますか?

編集:

これは単なる例です。Test 関数は contentscript の読み込み時に実行する必要があります。

contentscript.js

Test();

other.js;

function Test(){
  return true;
}

Google は、キャッチされていない ReferenceError、Test が定義されていないと言っています

4

2 に答える 2

12

Content Scriptsのドキュメントによると:

js : 一致するページに挿入される JavaScript ファイルのリスト。これらは、この配列に表示される順序で挿入されます。

あなたの場合、content.js最初に注入され、ロードされる前にotherTest()関数を実行しようとしますother.js)。

マニフェストに基づいて、両方のスクリプトが「document_idle」で読み込まれることに注意してください。そのため、ページが読み込まれた後に実行content.jsする呼び出しを登録したとしても、すぐに実行する必要があり ますTest()(ページが既に読み込まれているため.
ページのコンテンツが読み込まれる前にスクリプトを挿入してから、マニフェストを変更します。

"content_scripts": {
    ...
    "run_at": "document_start"
于 2013-10-31T22:44:37.950 に答える
3

他のスクリプトに関する回答を探している人や、拡張スクリプトにアクセスするための他の方法を探している人のために、もう少し追加します。

chrome.extensionメソッドとchrome.runtime通信メソッドを使用して、拡張機能の残りのスクリプトにアクセスできます。

  1. 拡張機能からすべてのスクリプトの配列を取得するには、 extension.getViewsメソッドを使用できます。

  2. バックグラウンド スクリプト、またはgetBackgroundPageメソッドを使用して特定のバックグラウンド スクリプトを取得することもできます。

  3. もう 1 つのオプションは、メッセージ パッシングを使用してruntime.sendMessageメソッドでスクリプトのコンテンツを渡し、別のスクリプトでイベント リスナーを使用してruntime.onMessageをリッスンし、スクリプトが送信スクリプトからデータを受信できるようにすることです。

  4. 前のオプションに加えて、メッセージ パッシングを使用して、 runtime.sendMessageで送信する別のアクティブな拡張機能からスクリプトを受信することもできますが、今回は代わりにruntime.onMessageExternalでイベント リスナーを使用します (コンテンツ スクリプトでは使用できません)。

以前に私を助けてくれたのと同じくらい、これが誰かに役立つことを願っています.

于 2016-11-30T09:03:43.840 に答える