Javascript 用于在Facebook上动态加载帖子的Greasemonkey脚本

Javascript 用于在Facebook上动态加载帖子的Greasemonkey脚本,javascript,facebook,greasemonkey,Javascript,Facebook,Greasemonkey,我写了一个Greasemonkey脚本,它影响了Facebook上第一次加载的帖子。 但是在你向下滚动feed之后,脚本在新加载的帖子上就不起作用了 有没有办法重新运行这些帖子的脚本,或者类似的东西?有人能帮我吗?更新: 这个问题和答案是非常古老的。 我不再推荐这种方法。相反,请参见: 或者通过类似或类似的库使用MutationObserver 旧答案: 是的,因为您使用的是Firefox,所以可以触发DOMSubtreeModified事件 为此,首先将当前脚本的代码部分包装到函

我写了一个Greasemonkey脚本,它影响了Facebook上第一次加载的帖子。 但是在你向下滚动feed之后,脚本在新加载的帖子上就不起作用了


有没有办法重新运行这些帖子的脚本,或者类似的东西?有人能帮我吗?

更新:
这个问题和答案是非常古老的。
我不再推荐这种方法。相反,请参见:

  • 或者通过类似或类似的库使用
    MutationObserver


旧答案:

是的,因为您使用的是Firefox,所以可以触发
DOMSubtreeModified
事件

为此,首先将当前脚本的代码部分包装到函数中;例如:

// ==UserScript==
// @name            Facebook Fixer
// ==/UserScript==

function LocalMain ()
{
    //--- Do all of your actions here.
}

LocalMain (); //-- Fire GM script once, normally.

接下来,找到包含新加载的帖子的节点。假设您发现它是一个id为“All_posts_go_here”的
div
(我不使用Facebook,请确保找到正确的节点,并且不要使用
body
,浏览器会慢到爬行)

一旦确定了正确的节点,就可以设置事件侦听器。但是,您还需要很短的时间延迟,因为节点更改一次发生数百次,您需要等待当前批处理完成

因此,将所有这些放在一起,代码如下所示:

if (window.top != window.self)  //don't run on frames or iframes
    return;

function LocalMain ()
{
    //--- Do all of your actions here.
}

LocalMain (); //-- Fire GM script once, normally.


var PostsChangedByAJAX_Timer    = '';
//--- Change this next line to find the correct element; sample shown.
var PostContainerNode           = document.getElementById ('All_posts_go_here');

PostContainerNode.addEventListener ("DOMSubtreeModified", PageBitHasLoaded, false);


function PageBitHasLoaded (zEvent)
{
    /*--- Set and reset a timer so that we run our code (LocalMain() ) only
        AFTER the last post -- in a batch -- is added.  Adjust the time if needed, but
        half a second is a good all-round value.
    */
    if (typeof PostsChangedByAJAX_Timer == "number")
    {
        clearTimeout (PostsChangedByAJAX_Timer);
        PostsChangedByAJAX_Timer  = '';
    }
    PostsChangedByAJAX_Timer      = setTimeout (function() {LocalMain (); }, 555);
}


请注意,我假设节点不是iframe。如果是,那么可能需要另一种方法。

发布你的greasemonkey脚本,也许我可以帮你。这真的取决于你是如何“影响”这些帖子的。幸运的是,这些帖子并不在IFRAME中。它们是id为“stream\u story\uuuxxxxxx”的LI元素,其中xxxxxx是一个23个字符的唯一代码,位于id为“home\u stream”的UL元素中。