为什么greasemonkey在facebook中没有检测到某些页面更改?

Rav*_*afi 5 javascript greasemonkey facebook

我试图在facebook中对user.js进行/ message页面,但看起来像在导航从/到/消息更改时,却没有注意到.它也出现在其他内部页面中.首先我认为它是由AJAX导航引起的,但URL改变了(不是散列部分),所以这是正常的导航,对吧?

这是我使用的测试页面:

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

alert(location.href);
Run Code Online (Sandbox Code Playgroud)

如何正确检测页面更改?


Firefox版本:6.0.2

Greasemonkey版本:0.9.11

And*_*y E 10

对于支持它的浏览器,包括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); 
Run Code Online (Sandbox Code Playgroud)

有关历史API的更多信息,请访问https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history.