Google chrome 多次触发Chrome扩展webRequest

Google chrome 多次触发Chrome扩展webRequest,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我有一个Chrome扩展,我想在每次部分(ajax)或完全重新加载页面时打开一个对话框 在我的背景页面中,我捕捉到如下ajax请求: chrome.webRequest.onCompleted.addListener( function(details) { if (details.frameId == 0) { chrome.tabs.executeScript(details.tabId, { "file": "

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

在我的背景页面中,我捕捉到如下ajax请求:

chrome.webRequest.onCompleted.addListener(
    function(details) {
        if (details.frameId == 0) {
            chrome.tabs.executeScript(details.tabId, {
                "file": "/js/Dialog.js"
            });
        }
    },
    {urls: ["https://*/]"}
);
在my Dialog.js中,我正在检查对话框是否已经初始化,因此我没有得到多个对话框,但它不工作,因为我得到了两个对话框,它似乎不工作。这是我检查它是否已初始化的步骤:

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

每个资源的事件
onCompleted
fires加载到选项卡上(图像、字体、样式等)

您需要改进事件筛选,或者同时使用
chrome.tabs.onCreated
chrome.tabs.onUpdated
来捕获选项卡的加载完成

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

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

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

我不确定该技巧是如何工作的,因为每次我进入Dialog.js时,isLoaded都会被重置,并且我会在条件中再次输入,我可能是错的。。。我将设法找到你提到的两个事件的一些信息。谢谢。它不会重置内容脚本中的变量。请参阅文档:将
类型:['xmlhttprequest']
添加到筛选器参数。请选择主题中的问题:包括重复该问题的。对于Chrome扩展或Firefox WebExtensions,这几乎总是意味着包括manifest.json和一些背景、内容和/或弹出脚本/HTML。寻求调试帮助的问题(“为什么这段代码没有按我想要的方式工作?”)必须包括:(1)所需的行为,(2)特定的问题或错误,(3)在问题本身中重现它所需的最短代码。另请参阅:、和。