我已经为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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top