Chrome扩展程序webRequest已多次触发

时间:2017-07-10 09:50:45

标签: google-chrome google-chrome-extension

我有一个Chrome扩展程序,我想在每次页面部分(ajax)或完全重新加载时打开一个对话框。

在我的后台页面中,我正在捕捉这样的ajax请求:

chrome.webRequest.onCompleted.addListener(
    function(details) {
        if (details.frameId == 0) {
            chrome.tabs.executeScript(details.tabId, {
                "file": "/js/Dialog.js"
            });
        }
    },
    {urls: ["https://*/]"}
);

在我的Dialog.js中,我正在检查对话框是否已经初始化,所以我没有得到多个对话框,但它不起作用,它似乎没有工作,因为我得到2个对话框。我这样做是为了检查它是否已经初始化:

if (!document.getElementById("my-dialog"))

1 个答案:

答案 0 :(得分:0)

每个资源的事件onCompleted触发器都被加载到选项卡上(图像,字体,样式等)。

您需要改进事件过滤,或者同时使用chrome.tabs.onCreatedchrome.tabs.onUpdated以捕获标签的加载完成情况。

这个:     !的document.getElementById( “我的对话中”) 可能不起作用,因为DOM更新操作很慢,所以当下一个事件被触发时,你的DOM可能仍然没有更新。

这个简单的技巧应该会更好:

var isLoaded = isLoaded || false; 
if(!isLoaded) {
    // ... load you dialog ...
    isLoaded = true; 
}