Chrome扩展中内容脚本的加载

5

我在开发Chrome扩展程序时遇到了问题。

我有一个内容脚本:

window.addEventListener("load",function(){
   var html = document.getElementsByTagName('html')[0];
   var title = document.getElementsByTagName('title')[0].innerHTML;
   if(html){
      chrome.extension.sendRequest({akce: 'content', title: title},function(response){});
      alert(title);
   }
},false);

然后我有一个背景页面:

chrome.extension.onRequest.addListener(function(request,sender,sendResponse){
    if(request.akce == 'content'){
        console.log(request.title);
    }
});

问题在于当我开始在地址栏输入时,我的内容脚本会被加载到自动完成列表中排名第一的网站上。如下面的截图所示,在我按下地址栏中的回车键之前,内容脚本已经被加载到了我尚未访问的网站上。
我不知道发生了什么。请,请帮帮我。 截图
2个回答

4

解决方案是从后台页面注入脚本。

例:从后台页面获取来路信息

chrome.tabs.executeScript(tabId,{
    code: "chrome.extension.sendRequest({action: 'content_refer', url: document.referrer},function(response){});"
});

chrome.extension.onRequest.addListener(function(request,sender,sendResponse){
    if(request.action == 'content_refer'){
        wipstats.allPages[sender.tab.id].ref = request.url;
    }
});

0

我猜你在Chrome浏览器中启用了“即时浏览”选项,我之前也遇到过同样的问题,正是因为这个原因,我禁用了它并再也没有使用过。


但是这对我来说没有用,因为我想将我的扩展分发给客户,我认为我无法在客户机器上禁用“即时浏览” :( - tomash
是的,你说得对,但我不喜欢Chrome的这个选项,我认为这是谷歌必须解决的问题,因为开发人员在这里无能为力。也许在即时浏览时不加载扩展,并在用户按下Enter后加载它们会是一个好主意,但我仍然相信这是谷歌必须解决的问题。 - haynar
还有一件事,我不确定,但可能有一些特定于Chrome的DOM事件可以在这种情况下捕获并处理这些情况,那将是另一个好的解决方案... - haynar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接