Google chrome 多次触发Chrome扩展webRequest
我有一个Chrome扩展,我想在每次部分(ajax)或完全重新加载页面时打开一个对话框 在我的背景页面中,我捕捉到如下ajax请求: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.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)在问题本身中重现它所需的最短代码。另请参阅:、和。