admin管理员组文章数量:1323735
I wrote a Greasemonkey script and it affect the firstly loaded posts on Facebook. but after you scroll down on the feed, the script doesn't work on the newly loaded posts.
Is there a way to re-run the script for those posts, or something like that? can anyone help me?
I wrote a Greasemonkey script and it affect the firstly loaded posts on Facebook. but after you scroll down on the feed, the script doesn't work on the newly loaded posts.
Is there a way to re-run the script for those posts, or something like that? can anyone help me?
Share Improve this question edited May 4, 2011 at 23:27 Brock Adams 93.6k23 gold badges241 silver badges305 bronze badges asked May 4, 2011 at 21:32 DdwerffdsfDdwerffdsf 1411 gold badge2 silver badges6 bronze badges 1- Post your greasemonkey script and maybe I could help you out. It really depends on how you are 'affecting' the posts. – Levi Morrison Commented May 4, 2011 at 22:54
1 Answer
Reset to default 9Update:
This question and answer are very old and DOMSubtreeModified
is deprecated.
I no longer remend this approach. Instead see:
- Fire Greasemonkey script on AJAX request
- Run Greasemonkey script on the same page, multiple times?
- Choosing and activating the right controls on an AJAX-driven site
- Or use
MutationObserver
via a library like Mutation Summary, or similar.
Old answer:
Yes, since you are using Firefox, you can trigger off the DOMSubtreeModified
event.
To do this, first wrap the code part of your current script in a function; for example:
// ==UserScript==
// @name Facebook Fixer
// ==/UserScript==
function LocalMain ()
{
//--- Do all of your actions here.
}
LocalMain (); //-- Fire GM script once, normally.
Next, find the node that contains the newly loaded posts. Say that you find that it is a div
with the id "All_posts_go_here" (I don't use Facebook, be sure to find the correct node, and do not use body
, the browser will slow to a crawl).
Once you've identified the correct node, you can set the event listener. But, you also need a short time delay because the node changes e hundreds at a time and you need to wait until the current batch is done.
So, putting it all together, the code looks like this:
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);
}
Beware that I'm assuming the node is not an iframe. If it is, then a different approach may be required.
本文标签: javascriptGreasemonkey script to work on dynamically loaded posts on FacebookStack Overflow
版权声明:本文标题:javascript - Greasemonkey script to work on dynamically loaded posts on Facebook - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742116379a2421485.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论