Google chrome extension Chrome扩展事件侦听器多次触发

Google chrome extension Chrome扩展事件侦听器多次触发,google-chrome-extension,Google Chrome Extension,导言 我的Chrome分机有问题。它应该显示一个小的覆盖弹出窗口(在jQuery中创建),根据您的文本选择显示来自Google的搜索结果。基本上,你应该能够突出显示任何页面上的文本,右键单击它(上下文菜单),单击“搜索‘选定关键字’”,然后在同一选项卡中弹出一个小窗口,作为覆盖谷歌所有搜索结果的窗口 问题 它的工作原理如前所述,但这只是第一次。当我高亮显示另一个关键字并搜索它时,扩展仍然会记住以前的关键字并同时抛出两个窗口。如果我要搜索另一个关键字,它会给我3个窗口,其中有2个以前的搜索和一个新

导言

我的Chrome分机有问题。它应该显示一个小的覆盖弹出窗口(在jQuery中创建),根据您的文本选择显示来自Google的搜索结果。基本上,你应该能够突出显示任何页面上的文本,右键单击它(上下文菜单),单击“搜索‘选定关键字’”,然后在同一选项卡中弹出一个小窗口,作为覆盖谷歌所有搜索结果的窗口

问题

它的工作原理如前所述,但这只是第一次。当我高亮显示另一个关键字并搜索它时,扩展仍然会记住以前的关键字并同时抛出两个窗口。如果我要搜索另一个关键字,它会给我3个窗口,其中有2个以前的搜索和一个新的搜索

我尝试在后台脚本中的侦听器执行后将其删除,但没有成功。看起来旧的侦听器在那里,它们正在响应来自内容脚本的请求。我能把它们移走吗

我试着说:

chrome.extension.onConnect.removeListener(listener);
在getClickHandler()函数的末尾,但不起作用

我也在想,也许背景脚本中的这段代码就是这么做的,但不确定

return function(info, tab) {
请问,你有什么建议吗

非常感谢

另外,我知道目前无法关闭此弹出窗口。但您可以随时刷新页面以获得干净的窗口。问题是,第二次我会在同一时间打开两个弹出窗口。。。等等,如上所述

清单文件:

{
  "name": "Easy search Accelerator",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Easily search for anything...",
  "icons": {
    "16": "icon.png",
    "48": "icon.png",
    "128": "icon.png"
  },
  "background": {
    "scripts": ["sample.js"]
  },
  "permissions": [
    "contextMenus",
    "tabs",
    "http://*/*",
    "https://*/*"
  ],
  "manifest_version": 2
}
背景页面/脚本(sample.js):

内容脚本(frame.js)

var-port=chrome.extension.connect({name:“searchQuery”});
port.postMessage({keywordRequest:“Yes”});
port.onMessage.addListener(函数listen(msg){
var test=msg.keyword;
$(“正文”)。追加(“”);
});

端口应用于长期“连接”

(内容脚本)和(背景)应在您的案例中使用(

这些方法可按如下方式使用:

  • 在扩展初始化时:在后台绑定
    onRequest
    事件
  • 内容脚本:Fire
    sendRequest(请求对象、响应函数)
  • 背景:收到上一个对象。做点什么,然后调用
    response\u func

另外,您是否真的包括jQuery,只是为了添加字符串?如果是,我强烈建议删除jQuery并使用vanilla JavaScript:

var div = document.createElement('div');
div.style.cssText = "position: fixed;top: 20px;right: 20px;z-index: 9999;";
div.innerHTML = "<iframe style=\"border:1px solid #868686;-webkit-box-shadow: 2px 2px 20px 1px rgba(0, 0, 0, 0.5);\" src=\""+ test +"\" width=328 HEIGHT=240></iframe>";
document.body.appendChild(div);
var div=document.createElement('div');
div.style.cssText=“位置:固定;顶部:20px;右侧:20px;z索引:9999;”;
div.innerHTML=“”;
文件.正文.附件(div);
var port = chrome.extension.connect({name: "searchQuery"});
port.postMessage({keywordRequest: "Yes"});
port.onMessage.addListener(function listen(msg) {

  var test = msg.keyword;
  $("body").append("<div style=\"position: fixed;top: 20px;right: 20px;z-index: 9999;\"><iframe style=\"border:1px solid #868686;-webkit-box-shadow: 2px 2px 20px 1px rgba(0, 0, 0, 0.5);\" src=\""+ test +"\" width=328 HEIGHT=240></iframe></div>");
});
var div = document.createElement('div');
div.style.cssText = "position: fixed;top: 20px;right: 20px;z-index: 9999;";
div.innerHTML = "<iframe style=\"border:1px solid #868686;-webkit-box-shadow: 2px 2px 20px 1px rgba(0, 0, 0, 0.5);\" src=\""+ test +"\" width=328 HEIGHT=240></iframe>";
document.body.appendChild(div);