我正在使用Chrome扩展程序,但是遇到了一个问题:我的内容脚本被注入到同一个页面多次。
我是在“background.html”页面上,在选项卡切换时注入内容脚本:
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){
chrome.tabs.getSelected(null,function(tab){
// Do some stuff
chrome.tabs.executeScript(null, { code: code}, function(result){
在内容脚本中,我有一些console.log命令。
问题是当我加载单个页面时,我会在控制台中看到每个日志出现2-4次。
我认为这是由于页面中的iframes引起的。我的问题是为什么?
我已经在文档中看到“all_frames”(清单中的内容脚本权限数组)默认应设置为“false”,导致内容脚本仅注入到页面的顶部框架中,但这根本没有发生!
为什么它会被多次注入?我需要物理上将“all_frames”设置为false吗?
其次:
有没有办法告诉扩展程序尝试将内容脚本注入的页面是否为iframe或来自“background.html”页面的顶部?
我已经尝试过
if(window.top === window){ console.log('whatever'); }
我发现这种方法并不总是有效的,即使在整个代码块(chrome.tabs.executeScript()周围)都有条件限制的情况下,我仍然看到内容脚本被多次注入....
如果您有任何想法或建议,将不胜感激! :)
chrome.tabs.getSelected()
,因为tab
对象有一个名为active
的属性,它可以让您知道该标签页当前是否被选中。 - thdoan