1

试图在我的 background.js 和 contentscript.js 之间进行通信

清单.json

{
    "name": "xxx",
    "version": "0.1",
    "manifest_version": 2,

    "permissions": [
        "tabs"
    ],

    "description": "xxx",
    "icons": { "16": "icon16.png",
               "48": "icon48.png",
               "128": "icon128.png" },

    "browser_action": {
        "default_title" : "xxx",
        "default_icon": "icon16.png",
        "default_popup": "popup.html"
    },

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

    "content_scripts" : [
    {
        "matches" : [ "http://*/*" ],
        "js" : [ "contentscript.js", "jquery.js" ]
    }
  ]
}

背景.js

var listePdt = {};
var selectedPdt = null;
var selectedId = null;

function updatePdt(tabId)
{
    chrome.tabs.sendMessage(tabId, {}, function(pdt) {
            chrome.pageAction.show(tabId);
    });
}

chrome.tabs.onUpdated.addListener(function(tabId, change, tab) {
    if(change.status == "complete")
    updatePdt(tabId);
});

chrome.tabs.onSelectionChanged.addListener(function(tabId, info) {
    selectedId = tabId;
    // and other things
});

chrome.tabs.getSelected(null, function(tab) {
    updatePdt(tab.id);
});

内容脚本.js

if(window == top)
{
    chrome.extension.onMessage.addListener(
        function(req, sender, sendResponse) {
            sendResponse(findPdt());
        }
    );
}

var findPdt = function() {

    // operations on a string

    return "string";
}

但是我在控制台中为生成的背景页面收到以下错误“端口错误:无法建立连接。接收端不存在”......不明白为什么。

有什么帮助吗?

4

1 回答 1

1

突出的一件事是:

chrome.tabs.getSelected(null, function(tab) {
    updatePdt(tab.id);
});

它目前已被弃用(请参阅此处此处),新方式看起来像这样(请注意,它windowId: chrome.windows.WINDOW_ID_CURRENT也包括在内以考虑您打开多个 Chrome 实例的情况(我有很多,显然 :))。

chrome.tabs.query(
  {windowId: chrome.windows.WINDOW_ID_CURRENT, active: true}, function(tab) {
  updatePdt(tab.id);
  } );

但是,对于您的主要问题,当您从、屏幕或任何其他“非标准”页面(书签、查看源代码、检查元素本身等)加载扩展程序时,这个(和getSelected)都会引发Port您看到的错误。 ),所以我会忽略它们。使用您的代码,重新加载扩展程序,打开您的 Inspect Element 窗口,然后转到浏览器中的另一个选项卡并重新加载页面 - 您应该看到所需的操作完成(我添加了一个调用作为调用的一部分,请求的值是返回。换句话说,一切似乎都很好:)chrome://extensionsNew tabconsole.log(pdt);sendMessage

于 2012-10-27T06:31:49.530 回答