javascript - chrome 扩展脚本在某些页面上加载了两次甚至更多

标签 javascript google-chrome-extension

这是我的 background.js 文件

 chrome.tabs.onUpdated.addListener(function(tabId,info, tab) {
    var sites =new Array('site2','site1');
    var url=tab.url;
    var siteFlag=0;
    for(var i in sites) {
       var regexp = new RegExp('.*' + sites[i] + '.*','i');
       if (regexp.test(url)) {siteFlag=1;}
    };
    if(siteFlag==1){
      chrome.tabs.executeScript(tabId, {file:"contentscript.js"});
      chrome.tabs.executeScript(tabId, {file:"jquery.js"});
      chrome.tabs.insertCSS(tabId,{file:"box.css"});
    }
 });

在 contentscript.js 中,我只是运行一个弹出框。

$(document).ready(function () {
    function popup() {...}
    if (window.addEventListener)
    {
        window.addEventListener('load', popup(), false); 
    } 
    else if (window.attachEvent)
    {
        window.attachEvent('onload', popup());
    }
});

有的页面只有一个弹出框,有的页面有两个甚至更多

问题是什么?

=============编辑==================

那些页面包含 Iframe

最佳答案

chrome.tabs.onUpdated.addListener 在选项卡状态更改时触发,这与 iframe 无关。您的脚本被多次注入(inject)同一帧,因为您为每次状态更改注入(inject)它,并且您只想在状态更改为“完成”时注入(inject)它。通过添加 if (changeInfo.status == "complete") { 修改您的代码:

chrome.tabs.onUpdated.addListener(function(tabId,info, tab) {
   if (info.status == "complete") {
      /* checking & injecting stuff */
   }
});

关于javascript - chrome 扩展脚本在某些页面上加载了两次甚至更多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148677/

相关文章:

javascript - Chrome 存储空间未定义存储的计时器

javascript - Chrome 扩展 - 执行前修改脚本

javascript - 使用 jQuery 更新跨度内部 html .html 在 IE 中不起作用

javascript - 如何在 JavaScript/jQuery 中实现重载?

javascript - Windows8 Metro 应用程序中的错误和警告栏

javascript - 如何在 Firefox 扩展中捕获特定的 xmlhttp 请求?

javascript - 开始范围以插入 Div

javascript - 如何获取所有 chrome 内容设置?

javascript - 哪个版本的 IE 支持 iframe 的安全性 ="restricted"

java - 实现基于网络的数据浏览器的最佳方法是什么?