我有一个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"))
答案 0 :(得分:0)
每个资源的事件onCompleted
触发器都被加载到选项卡上(图像,字体,样式等)。
您需要改进事件过滤,或者同时使用chrome.tabs.onCreated
和chrome.tabs.onUpdated
以捕获标签的加载完成情况。
这个: !的document.getElementById( “我的对话中”) 可能不起作用,因为DOM更新操作很慢,所以当下一个事件被触发时,你的DOM可能仍然没有更新。
这个简单的技巧应该会更好:
var isLoaded = isLoaded || false;
if(!isLoaded) {
// ... load you dialog ...
isLoaded = true;
}