【问题标题】:Greasemonkey script to work on dynamically loaded posts on FacebookGreasemonkey 脚本用于处理 Facebook 上动态加载的帖子
【发布时间】:2011-05-04 21:32:27
【问题描述】:

我编写了一个 Greasemonkey 脚本,它会影响 Facebook 上首次加载的帖子。 但是在您向下滚动提要后,该脚本不适用于新加载的帖子。

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

【问题讨论】:

  • 发布你的greasemonkey脚本,也许我可以帮助你。这真的取决于你如何“影响”这些帖子。

标签: javascript facebook greasemonkey


【解决方案1】:

更新:
这个问题和答案很老了DOMSubtreeModified is deprecated
我不再推荐这种方法。而是看到:



旧答案:

是的,由于您使用的是 Firefox,您可以触发 DOMSubtreeModified 事件。

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

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

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

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

接下来,找到包含新加载帖子的节点。说你发现是div,id为"All_posts_go_here"(我没用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。如果是,则可能需要采用不同的方法。

【讨论】:

  • 幸运的是,这些帖子不在 IFRAME 中。它们是 LI 元素,其 id 为“stream_story_xxxxxx”,其中 xxxxxx 是 23 个字符的唯一代码,位于 id="home_stream" 的 UL 元素中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多