0

我正在使用以下代码访问谷歌浏览器中的后台页面功能

popup.html

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

        });    
}

背景.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"] 


 }

请注意,背景属性现在包含一个字符串数组,这些字符串表示要(按指定顺序)加载到动态生成的背景页面中的 JavaScript 文件。

我还将该minimum_chrome_version属性设置为 18,因为清单版本 2 仅应在针对此版本的 Chrome 及更高版本时使用。

开发人员现在应该只在需要支持旧版 Chrome 时才真正需要使用后台页面而不是脚本。

编辑

它只是单击了您正在尝试在后台页面中执行嵌入的 JavaScript。Manifest 版本 2 引入了禁止执行内联(例如和)和嵌入式 JavaScript的内容安全策略。这就是为什么你的 background.html 不起作用以及为什么 background.js 会起作用。您还需要确保您的 popup.html 不包含任何嵌入式 JavaScript。最好的解决方法(通常也是最佳实践)是将所有 JavaScript 抽象到它自己的文件(例如 popup.js)中,该文件由 HTML 文件引用。例如;onclick="showDialog();"href="javascript:void(0);"

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