0

我想创建一个扩展,其中内容脚本将消息发送到后台页面,然后在浏览器操作上意味着单击扩展图标将访问该后台页面并获取一些数据。我在 windows8 上使用 chrome 版本 23.0.1271.64 m。

我收到以下错误。端口错误:无法建立连接。接收端不存在。

我试图解决同样的问题。但人们正在使用 chrome20+ 不支持的 sendRequest。我还找到了针对 chrome 20+ 的解决方案。但不工作。请帮忙。

以下是文件内容。

清单.json

{
  "name": "Test Extension",
  "version": "1.0",
  "manifest_version": 2,
  "description": "A test extension.",
  "background": "background.html",
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["jquery.js","content.js"]
    }
  ],
 "permissions": ["tabs", "http://*/", "https://*/"],
   "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }
}

背景.html

<html>
<head>
    <script src="background.js"></script>
</head>
<body>
    <h1>Wy</h1>
</body>
</html>

背景.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    // Chrome 20+
    alert(request);
    console.log('received in listener');
  sendResponse({farewell: "goodbye"});

});

内容.js

$(function(){
console.log('start-sending message');

chrome.extension.sendMessage({greeting: "hello"},function(response){alert(response);});

console.log('end-sending message');
});

popup.html

<!doctype html>
<html>
  <head>
    <title>Getting Started Extension's Popup</title>
    </style>

    <!-- JavaScript and HTML must be in separate files for security. -->
    <script src="jquery.js"></script>
    <script src="popup.js"></script>

  </head>
  <body>
  </body>
</html>

popup.js

$(function(){
  var str_html = "<tr><td width='60%'>S</td><td width='40%'>15</td></tr><tr><td width='60%'>M</td><td width='40%'>25</td></tr>";
  $('#sizes_container').html(str_html);
  var bkg = chrome.extension.getBackgroundPage();
    console.log(bkg);
});
4

1 回答 1

0

您错误地将已弃用的"background_page"属性与"background". 使用后台页面的正确方法是:

"background": {
    "scripts": ["background.js"]
}

您可以完全摆脱您的background.html,因为它没有任何用途(您的内容<body>未使用)(如果您真的需要它,请使用"background": {"page": "background.html"})。

关于sendRequest,它确实已被弃用,但尚未删除(尚未)。

关于您的弹出页面:您没有任何带有 ID 的元素sizes_container,因此您显然不会看到任何输出。

于 2012-11-11T10:57:08.607 回答