2

次の Google Chrome 拡張ファイルでは、myscript.js ファイル内で jquery スクリプトを使用できないのはなぜですか?jquery は myscript.js ファイル内でロードされませんか?myscript.js 内で jquery を使用するには、マニフェスト ファイルでどのような変更を行う必要がありますか?

マニフェスト.json

  {
    "manifest_version": 2,

    "name": "One-click Kittens",
    "description": "This extension demonstrates a browser action with kittens.",
    "version": "1.0",
     "background": { "scripts": ["jquery-1.9.1.min.js","myscript.js"] },

    "permissions": [
     "tabs", "http://*/*"
    ],
    "browser_action": {
      "default_icon": "icon.png",
      "default_popup": "popup.html"
    }
  }

myscript.js

 alert($("#extension-command-list").val());    //undefined
 alert($("#extension-command-list").html());   //undefined
 $(document).ready(function() {
    alert("hello world");  //not seen
 });

編集:

"background": { "scripts": ["jquery-1.9.1.min.js"] },

 "content_scripts": [
 {
  "matches": ["https://*/*"],
  "js": ["myscript.js"]   or "js": ["jquery-1.9.1.min.js","myscript.js"]
 }
],
4

1 に答える 1

6

あなたが取得している理由はundefined、背景ページを指定していないためです。

つまり、Chrome が生成する背景ページは次のようになります。

<html>

    <head></head>

    <body>
        <script src="jquery-1.9.1.min.js"></script>
        <script src="myscript.js"></script>
    </body>

</html>

ご覧のとおり、選択できる Element がないため、最初alertの も returnundefinedです。

とにかく、 も表示する必要alert("hello world")があります。DOMContentLoaded


アクセスしているサイトの要素を選択したいということでしょうか?

その場合は、背景ページの代わりにコンテンツ スクリプトmyscript.jsを配置する必要があります。そこで、サイトの DOM にアクセスできます。


それで問題は、あなたは何をしているのですか?


実際に背景ページで要素を選択したい場合は、いずれかを指定する必要があります。背景ページのサイトを見ると、次のように簡単に表示されます。

{
"name": "My extension",
...
"background": {
"page": "background.html"
},
...
}

編集:

  • "default_popup": "popup.html"

Browser Actions Popupを参照します。ブラウザ アクションが使用されます

[...] メインの Google Chrome ツールバーのアドレス バーの右側にアイコンを配置します。ブラウザー アクションには、アイコンに加えて、ツールヒント、バッジ、およびポップアップを含めることもできます。

そう

ブラウザー アクションにポップアップがある場合、ユーザーがアイコンをクリックするとポップアップが表示されます。ポップアップには任意の HTML コンテンツを含めることができ、そのコンテンツに合わせて自動的にサイズ変更されます。ブラウザー アクションにポップアップを追加するには、ポップアップのコンテンツを含む HTML ファイルを作成します。マニフェストの browser_action の default_popup フィールドに HTML ファイルを指定するか、setPopup メソッドを呼び出します。

  • "バックグラウンド":"{...}"

拡張機能の一般的なニーズは、タスクまたは状態を管理するための単一の長時間実行スクリプトを持つことです。救助への背景ページ。
アーキテクチャの概要で説明したように、バックグラウンド ページは拡張プロセスで実行される HTML ページです。拡張機能の存続期間中存在し、一度にアクティブになるインスタンスは 1 つだけです。

また、Chrome 拡張機能の Api のすべての部分にバックグラウンド スクリプトでアクセスできます。 chrome.* それぞれ許可を要求した場合


たとえば、クロムの ContextMenu をいくつかの機能で拡張したいとします。

これを行うには、まずバックグラウンド ページで contextMenuEntry を作成します。
そして、バックグラウンド ページで一度に実行されるインスタンスが1 つだけであり、それが拡張機能の存続期間中であるように、contextMenuEntry はそのインスタンスを1 つだけ持つ必要があります。これは、拡張機能の実行時に作成され、存続期間中残りますあなたの拡張子。

ここで、アクセスしているページの現在選択されているテキストをメニュー エントリの 1 つに表示したいとします。

これを行うには、 API メソッドにアクセスする必要がありますが、コンテンツ スクリプトはこれを使用できませんchrome.contextMenus

これを機能させるには、選択したテキストを含むメッセージを背景ページ渡す必要があります。chrome.extension.sendMessage

バックグラウンド ページで、既存のcontextmenuentry を更新して、選択したテキストを表示できます。

申し訳ありませんが、今はより良い例を思いつきませんでした

于 2013-03-21T11:52:20.137 に答える