在加载Facebook上的新内容时运行用户脚本

时间:2013-12-08 19:38:53

标签: javascript facebook userscripts

我正在编写用户脚本,用另一个单词替换页面中每个单词的出现次数(想想the cloud - > my butt)。它基于此脚本https://github.com/panicsteve/cloud-to-butt/blob/master/Source/content_script.js

通常这很容易。我只需要在页面加载完成后运行它。但是,我正在对Facebook新闻源执行此操作,并且该脚本仅适用于最初加载的内容。当我向下滚动并加载新内容时,脚本不会触及这些新内容中的文本。

如何在我向下滚动页面时加载新内容时,脚本会再次运行?

2 个答案:

答案 0 :(得分:0)

这很难看,但是使用window.setTimeout()函数可以做到这一点......当然是p代码。

var updateStuff() {
  var els = document.GetElementsByClassNames("ThingsToLookFor");

  for (var i = 0; i < els.length; i++) {
    var el = els[i];
    if (el["data-touched"]) {
      // We've seen this
      continue
    }

    // Update the element or whatever you do
    el["data-touched"] = true;

    window.setTimeout(updateStuff, 250);
  }
}
// Kick it off
updateStuff();

实际上不使用数据触摸 - 我不想寻找更新数据的真实语法 - 或者你可以使用el.setAttribute("data-touched", true)

答案 1 :(得分:0)

最后我使用了MutationObserver

// select the target node for mutation observation
var target = document.body;

// create an observer instance
var observer = new MutationObserver(function(mutations) { // mutations: an array of MutationRecord objects
    mutations.forEach(function(mutation) {
        var addedList = mutation.addedNodes;
        for (var i = 0; i < addedList.length; ++i) {
            // do something with addedList[i]
        }
    });    
});

// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true, subtree: true };

// pass in the target node, as well as the observer options
observer.observe(target, config);