Google Chrome中未触发后台网页功能:

时间:2012-06-07 02:49:16

标签: google-chrome google-chrome-extension

我使用以下代码访问google chrome中的背景页面功能

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>

的manifest.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"] 


 }

但是它不会打印警报。谁能告诉我我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

您的HTML for background.html格式错误,应该修复;

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

标签应按照打开的相反顺序关闭,以保持正确的层次结构。由于您尚未执行此操作,因此<script>元素格式错误且包含无效语法</html></body>,因此无法正确执行。

由于您正在使用清单的version 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 property现在包含一个字符串数组,表示要在动态生成的背景页面中加载(按指定顺序)的JavaScript文件。

我还将minimum_chrome_version属性设置为18,因为只有在定位此版本的Chrome及更高版本时才能使用清单版本2.

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

修改

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

<script src="/popup.js"></script>