2012-09-12 50 views
5

我在开发Chrome扩展时遇到了问题。在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); 

然后我有一个BG页:

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

的问题是,当我开始输入到地址栏,我的内容脚本加载在网站上这是自动完成列表中的第一个。正如您在下面的屏幕截图中看到的,内容脚本在我点击地址栏中的输入之前被加载,并在我尚未加入的网站上加载。

我不知道发生了什么事。请帮助我。

screenshot

回答

4

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

示例:从BG页

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中称为“即时浏览”选项,我有同样的问题,前一段时间,并准确,因为这个原因,我禁用了,从来没有使用过它了。

+0

得到引荐,但是这不是我有用的,因为我想我的分布扩展的客户,我认为我不能禁用客户机上的“即时浏览” :( – tomash

+0

是的,你是对的,但我不喜欢这个选项的铬,我相信这是一个谷歌必须解决的问题,因为开发人员在这里不能做任何事情。也许这是一件好事,不是加载扩展,而即时浏览打开并加载后,用户点击输入,但我相信这是谷歌必须解决 – haynar

+0

还有一件事,我不知道,但也许有一些铬特定的DOM事件是可能的为了解决这种情况并处理这种情况,这将是另一个好办法...... – haynar

相关问题