0

私はグーグルクロームのバックグラウンドページ機能にアクセスするために次のコードを使用しています

popup.html

function sendRequest(ea,eb)
{
console.log("Inside");
chrome.extension.sendRequest({ea:ea,eb:eb},
        function(response)
        {
            alert(response.farewell);

        });    
}

background.html

<html>
<body>
<script>
chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
sendResponse({farewell: "goodbye"});
  })
</html>
</body>
</script>

マニフェスト.json

{
  "name": "My First Extension",
  "version": "1.0",
  "manifest_version": 2,
  "background": {
    "page": "background.html"
  },
"content_scripts": [
    {
      "matches": ["http://*/"],

      "js": ["popup.js"]
    }
  ],



  "description": "The first extension that I made.",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "mine.html"
  },
  "permissions": [
    "tabs","http://*/","background"

  ],
   "web_accessible_resources": ["loading.html","bu.png"] 


 }

ただし、アラートは出力されません。誰かが私がここで間違っていることを教えてもらえますか?

4

1 に答える 1

3

background.htmlのHTMLは非常に形式が正しくないため、修正する必要があります。

<html>
<body>
<script>
  chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
  sendResponse({farewell: "goodbye"});
    })
</script>
</body>
</html>

正しい階層を維持するために、タグは開いているのと逆の順序で閉じる必要があります。そうしなかったため、<script>要素の形式が正しくなく、無効な構文が含まれていたため、</html></body>正しく実行されませんでした。

マニフェストのバージョン2を使用しているため、このスクリプト要素のコンテンツを(すべてのHTMLを無視して)独自のファイル(background.jsなど)に抽象化し、マニフェストを次のように変更することを検討してください。

{
  "name": "My First Extension",
  "version": "1.0",
  "manifest_version": 2,
  "minimum_chrome_version": "18",
  "background": {
    "scripts": ["background.js"]
  },
"content_scripts": [
    {
      "matches": ["http://*/"],

      "js": ["popup.js"]
    }
  ],



  "description": "The first extension that I made.",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "mine.html"
  },
  "permissions": [
    "tabs","http://*/","background"

  ],
   "web_accessible_resources": ["loading.html","bu.png"] 


 }

backgroundプロパティには、動的に生成されたバックグラウンドページに(指定された順序で)ロードされるJavaScriptファイルを表す文字列の配列が含まれていることに注意してください。

minimum_chrome_versionまた、マニフェストバージョン2は、このバージョンのChrome以降を対象とする場合にのみ使用する必要があるため、プロパティを18に設定しました。

開発者は、古いバージョンのChromeをサポートする必要がある場合に、スクリプトではなくバックグラウンドページを使用するだけで済みます。

編集

バックグラウンドページ内に埋め込まれたJavaScriptを実行しようとしていることをクリックしただけです。マニフェストバージョン2では、インライン(および)および埋め込みJavaScriptの実行を禁止するコンテンツセキュリティポリシーが導入されています。これが、background.htmlが機能しない理由とbackground.jsが機能する理由です。また、popup.htmlにJavaScriptが埋め込まれていないことを確認する必要があります。最善の回避策(およびとにかく一般的なベストプラクティス)は、すべてのJavaScriptをHTMLファイルによって参照される独自のファイル(popup.jsなど)に抽象化することです。例えば;onclick="showDialog();"href="javascript:void(0);"

<script src="/popup.js"></script>
于 2012-06-07T07:31:16.940 に答える