Chrome扩展程序 - 重复事件监听器?

时间:2012-08-06 15:29:25

标签: event-handling google-chrome-extension

简介

我的Chrome扩展程序出现问题。它应该根据您的文本选择显示一个小的覆盖弹出窗口(在jQuery中创建)和谷歌的搜索结果。基本上你应该可以在任何页面上突出显示文本,右键单击它(上下文菜单),点击“搜索'选择的关键字'”,并在同一个标​​签中弹出一个小窗口作为覆盖图,其中包含所有搜索结果谷歌或不同的搜索引擎。

问题

现在扩展程序运行良好而且没有问题,但是在广泛使用此扩展程序(假设1小时)之后,当我突出显示另一个关键字并搜索它时,扩展名REMEMBERS最后一个关键字并显示错误的搜索结果。然后,当我突出显示另一个关键字时,它会重新记住我刚刚突出显示的关键字,但以前没有得到它的结果。这就像一个链接过程,我总是一个关键词。

我的想法

我认为这个问题的原因可能是事件监听器,因为当出现这个问题时,我从console.log获取了一个日志(chrome.extension.onRequest.hasListeners());这说的是真的。这意味着附加了两个或更多事件侦听器,它们不应该被我通过chrome.extension.onRequest.removeListener(listener1)删除它们;

也许当实际网页仍在加载时我会突然显示关键字,点击上下文菜单并且扩展无法加载,但不知何故事件监听器触发......我真的无法完全复制这个问题。 ..以及导致这个问题的原因。

清单文件

{
  "name": "Search Accelerator",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Search Accelerator extension",
  "icons": {
    "16": "icon19.png",
    "48": "icon48.png",
    "128": "icon128.png"
  },
  "background": {
    "scripts": ["content_script.js"]
  },
  "minimum_chrome_version": "18",
  "permissions": [
    "contextMenus",
    "tabs",
    "http://*/*",
    "https://*/*",
    "management",
    "webRequest"
  ]
}

内容脚本

  

chrome.contextMenus.create({“title”:'搜索“%s”',
    “contexts”:['selection'],“onclick”:getClickHandler()});

     

function getClickHandler(){return function(info,tab){
  的console.log(chrome.extension.onRequest.hasListeners());

chrome.extension.onRequest.addListener(function listener1 (request, sender, sendResponse) {
  var url = "http://www.google.com/?s=" + info.selectionText;
  console.log(url);       var keywordObj = {keyword: url};
  if (request.keywordRequest == "Yes") {
    console.log(keywordObj);
    sendResponse(keywordObj);
  };
  chrome.extension.onRequest.removeListener(listener1);     }     );

chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.executeScript(null, { file: "popup.js" });
});   }; };

Popup js

chrome.extension.sendRequest({keywordRequest: "Yes"}, function(response) {
$(document).ready(function() {
    if($("#e14_accelerator")) {
        $("#e14_accelerator").remove();
    }
    var rkeyword = response.keyword;

    $("body").append("<div id=\"e14_accelerator\" style=\"position: fixed;top: 30px;right: -330px;z-index: 999999; \"><iframe style=\"border:5px solid #c9c9c9;-webkit-box-shadow: 1px 1px 15px 1px rgba(0, 0, 0, 0.2);\" src=\""+ rkeyword +"\" width=\"328\" height=\"240\"></iframe></div>");
    $("#e14_accelerator").animate({right:-13},500);

    $(document).click(function() {
            $("#e14_accelerator").remove();
    });
    $("#e14_accelerator").click(function() {
        return false;
    });
 });
});

出现此问题时出现的错误消息:

Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(230,230,230,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. sendRequest:21
chromeHidden.handleResponse sendRequest:21
Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(230,230,230,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. sendRequest:21
chromeHidden.handleResponse

0 个答案:

没有答案