我在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命令
问题是当我加载一个SINGLE页面时,我看到每个日志都会在控制台中显示2-4次。
我很清楚,这是因为页面中的iframe,我认为至少...我的问题是为什么?
我在文档中看到默认情况下应将“all_frames”(清单中的内容脚本权限数组)设置为“false”,导致内容脚本仅被注入页面的顶部框架,但这是根本就没有发生!
为什么要多次注射?我是否需要将“all_frames”物理设置为false?
其次:
有没有办法判断扩展程序试图将内容脚本注入的页面是否来自“background.html”页面中的iframe或顶部?
我试过了
if(window.top === window){ console.log('whatever'); }
发现它在100%的时间内都不起作用。即使我的代码块的其余部分(围绕chrome.tabs.executeScript())有条件,我仍然看到内容脚本多次注入....
任何想法或建议将不胜感激! :)
答案 0 :(得分:3)
onUpdated
都会触发。这包括何时加载和完成加载,这解释了许多日志语句。
每次事件发生时,您都需要检查更改的内容(URL已更改,加载等)。