功能完成后运行代码或出现DIV
-
28-09-2019 - |
题
我已经为Facebook编写了一个用户订阅,IT将类似的通知分组在一起。现在,仅使用一个静态HTML页面带有旧通知,该脚本可工作100%。
这是问题: 默认情况下包含通知的DIV,直到用户单击“通知”按钮之前,它没有通知。 Facebook有一个内联 onclick
显示DIV(通知菜单)并使用Ajax获取通知的事件。由于我的Userscript仅在启动时运行,因此在那里什么都没找到 - 它在页面上没有影响。我尝试使用.click()事件,但是当您单击“通知”按钮时,它会运行我的代码。问题是,Facebook仍在运行它是AJAX要求通知的请求,这意味着我的脚本仍然没有通知,因此没有效果。
我不想使用通用的settimeout,因为我不希望用户以前看到通知,然后突然看到它们。有没有办法监视DIV,因此一旦添加了通知,就可以运行?还是Facebook完成的是Ajax请求,它将运行我的代码?
解决方案
你可以 setInterval()
为了监视DIV的InnerHTML,一旦填充,您就可以运行。
其他提示
这是问题: 默认情况下包含通知的DIV,直到用户单击“通知”按钮之前,它没有通知。 Facebook有一个内联的OnClick事件,显示DIV(通知菜单),并使用Ajax获取通知。
...
我不想使用通用的settimeout,因为我不希望用户以前看到通知,然后突然看到它们。有没有办法监视DIV,因此一旦添加了通知,就可以运行?
就在这里:
var notificationDiv = document.getElementById(...);
var lastTimeoutID = null;
var main = function(evt){
// evt.target is the inserted element
// if you expect more elements, then do the following:
lastTimeoutID = setTimeout(function(){
lastTimeoutID = null;
// uncomment below block if you only need to do the work once.
/*
notificationDiv.removeEventListener("DOMNodeInserted", main, false);
*/
// do your work here.
}, 500); // waiting 500ms for next element to be added, otherwise doing work.
if (lastTimeoutID) {
clearTimeout(lastTimeoutID);
lastTimeoutID = null;
}
};
notificationDiv.addEventListener("DOMNodeInserted", main, false);
上面的所有超时代码都可以根据您的用户字样所做的一切来删除。
也许您可以添加Settimeout循环。就像是
setTimeout(function(){
/* check for divs */
if(/* divs are found */){
//apply code
}
else {
setTimeout(/* loop again */);
}
},1000);
不隶属于 StackOverflow