Chrome扩展程序 - 每个页面加载时多次注入内容脚本

时间:2011-10-20 00:44:17

标签: google-chrome google-chrome-extension google-chrome-devtools

我在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())有条件,我仍然看到内容脚本多次注入....

任何想法或建议将不胜感激! :)

1 个答案:

答案 0 :(得分:3)

每次标签的状态发生变化时,

onUpdated都会触发。这包括何时加载完成加载,这解释了许多日志语句。 每次事件发生时,您都需要检查更改的内容(URL已更改,加载等)。