【问题标题】:Can not establish a connection between background page and content page无法在后台页面和内容页面之间建立连接
【发布时间】:2013-01-27 23:56:26
【问题描述】:

我正在编写 chrome 扩展程序,并尝试在背景页面和内容页面之间发送消息。

问题是连接从未建立。我什至从谷歌文档中复制了代码,但无济于事。

这是我的清单页面

{
  "name": "x",
  "description": "x",
  "version": "0.1",
  "permissions": ["contextMenus", "tabs", "notifications"],
   "content_scripts": [
    {
      "matches": ["http://*/*","https://*/*"],
      "js": ["jquery.js", "content_script.js"]
    }
  ],
  "background": {
    "scripts": ["sample.js"]
  },
  "manifest_version": 2
}

我的背景页面

function genericOnClick(info, tab) 
{
       //copy pasted from google tutorials. My own code also didn't work
       chrome.tabs.getSelected(null, function(tab) {
  chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});


}



// Create a parent item and two children.
var parent1 = chrome.contextMenus.create({"title": "Rank Trigger", "contexts":["all"]});

var child1 = chrome.contextMenus.create
(
    {"title": "Rank 1", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 2", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick}
);
var child2 = chrome.contextMenus.create
(
    {"title": "Rank 3", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick}
);

内容脚本:

//copied from google tutorials
chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });

有什么想法吗?也许因为事件是从上下文菜单触发的,但我不太确定。我是 JS 和 chrome 扩展编程的新手。

谢谢

【问题讨论】:

  • genericOnClick(e) 将事件对象作为e 传递,对吗?所以你需要e.target,还是我弄错了?
  • 我在这里发布代码后编辑代码时写的一个错字......两者都是我代码中的“事件”。 :)
  • 你应该显示你用来设置处理程序的代码
  • 按要求编辑了代码

标签: javascript html events dom google-chrome-extension


【解决方案1】:

结果我的代码按预期工作,并且消息确实在每次点击时都发送了。问题是我在没有注入 contentScript 的错误页面上测试它。

我犯了一个愚蠢的错误...感谢大家的帮助

【讨论】:

    【解决方案2】:

    在元素上设置onclick 处理程序,然后使用event.currentTarget.outerHTML 获取被点击元素的HTML。

    【讨论】:

    • 得到以下错误,我需要“#include”什么吗? 'contextMenus' 的事件处理程序出错:无法读取未定义的属性 'outerHTML' :17 在 chrome.Event.dispatchToListener (event_bindings:387:21) 在 chrome.Event.dispatch_ (event_bindings:373:27) 在 dispatchArgs (event_bindings:249:22) 在 Object.chromeHidden.Event.dispatchEvent (event_bindings:257: 7)
    • 这意味着您没有正确引用该元素。当您触发 onclick 函数时,获取传递给函数的事件对象并查看它是否具有已定义的 currentTarget 属性。该 currentTarget 属性应该是对您想要的元素的引用...
    • 我认为问题出在将消息从后台页面发送到内容页面时。我再次编辑了问题,使其不那么本地化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多