javascript - 为什么 greasemonkey 检测不到 facebook 中的某些页面更改?

标签 javascript facebook greasemonkey

我试图在 facebook 中对/messages 页面执行 user.js,但当导航从/更改为/messages 时,greasemonkey 似乎没有注意到。它也发生在其他内部页面中。 一开始我以为是AJAX导航引起的,但是URL变了(不是hash部分),所以是正常导航吧?

这是我用过的测试页:

// ==UserScript==
// @name           Test
// @namespace      none
// @description    just an alert when page changes
// @include        http*://www.facebook.com/*
// ==/UserScript==

alert(location.href);

如何正确检测页面变化?


火狐版本:6.0.2

Greasemonkey 版本:0.9.11

最佳答案

对于支持它的浏览器,包括 Firefox 4+,Facebook 利用了 HTML5 History API。此 API 允许使用 history.pushState() 方法更改位置,但实际上并未发生导航。尽管该页面可能看起来已经改变,但所发生的只是一个改变了大部分内容的幕后 ajax 调用。

如果您想捕获此更改,则必须使用您自己的函数代理 pushState() 方法:

(function (old) {
    window.history.pushState = function () {
        old.apply(window.history, arguments);
        alert(window.location.href);
    }
})(window.history.pushState); 

https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history 阅读有关历史 API 的更多信息.

关于javascript - 为什么 greasemonkey 检测不到 facebook 中的某些页面更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381367/

相关文章:

android - 从您的 Android 应用程序中打开 Facebook native 应用程序

javascript - 让 Greasemonkey 对元素的 ajax 更改使用react

javascript - 我无法让 JavaScript 事件监听器正常工作

javascript - 动态更改自动生成的 CSS

facebook - 使用存储在我电脑中的过期 SSL 证书的网站的异常(exception)情况在哪里?

Javascript/Node Js - 为每个实例创建新变量

javascript - 如何从 javascript 运行 php 脚本

greasemonkey - 如何仅运行一次 Greasemonkey 脚本

javascript - 线路以奇怪的顺序运行

javascript - 限制用户编辑特殊字符后的字符 - Jquery