我正在尝试为 Facebook 编写一个 Greasemonkey 脚本,并且在他们所做的时髦页面/内容加载时遇到了一些问题(我不太明白这一点 - 很多链接实际上只是在更改 GET,但我认为他们做某种服务器重定向以使 URL 在浏览器中看起来也一样?)。本质上,唯一需要的测试就是在脚本中单独放置一个GM_log()
。如果您在 Facebook 周围单击,即使使用 facebook.com/* 作为模式,它通常也不会执行。有什么我可以做的,或者是在 Greasemonkey 中修复了“页面加载”的想法,而 FB 正在通过使用单个 URL “欺骗”它不运行?
如果我尝试像这样进行一些基本的内容操作:
GM.log("starting");
var GM_FB=new Object;
GM_FB.birthdays = document.evaluate("//div[@class='UIUpcoming_Item']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = GM_FB.birthdays.snapshotLength - 1; i >= 0; i--) {
if (GM_FB.birthdayRegex.test(GM_FB.birthdays.snapshotItem(i).innerHTML)) {
GM_FB.birthdays.snapshotItem(i).setAttribute('style','font-weight: bold; background: #fffe88');
}
}
结果是有时只有手动页面刷新才能使其工作。拉起 Firebug 控制台并强制代码运行工作正常。请注意,这不是由于 DOM 某些部分的延迟加载:我稍后添加了一些代码来等待相关元素,而且至关重要的是,对于某些转换,消息永远不会被记录。例如,当我从消息切换到新闻提要并返回时。