它看起來像Greasemonkey的沙箱(XPCNativeWrapper)已更改。這似乎是一個可能的錯誤,但我目前沒有看到任何未解決的問題。
此外,watch()
是非標準的(可能會消失),並根據the documentation是not meant to be used except for temporary debugging。
在此期間,您可以通過將其注入的頁面範圍,像這樣得到的代碼再次合作:
function AddTitleWatch() {
document.watch ('title', function (prop, oldval, newval) {
var matches, names;
if (matches = newval.match (/Inbox \((\d+)\)/)) {
names = newval.match (/\w+/)
newval = '(' + matches[1] + ') unread - ' + names[0] + ' Inbox';
}
return (newval);
});
}
function addJS_Node (text, s_URL, funcToRun) {
var D = document;
var scriptNode = D.createElement ('script');
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}
addJS_Node (null, null, AddTitleWatch);
但聰明的,長期的,更強大的,便攜的解決方案是重構代碼以使用間隔計時器。 ...
setInterval (RefactorTitle, 200);
function RefactorTitle() {
var oldTitle = RefactorTitle.oldTitle || "";
var docTitle = document.title;
if (docTitle != oldTitle) {
var matches, names;
if (matches = docTitle.match (/Inbox \((\d+)\)/)) {
names = docTitle.match (/\w+/);
docTitle = '(' + matches[1] + ') unread - ' + names[0] + ' Inbox';
}
document.title = docTitle;
RefactorTitle.oldTitle = docTitle;
}
}
unsafeWindow.document.watch是頁面特定的函數嗎?從我的(雖然有限)閱讀它是JavaScript,不應該是網站或頁面特定。我會在頁面源代碼中尋找哪些內容來識別新功能? – EBlackstone 2012-02-16 07:04:53
是的,你是對的。 'watch()'不是頁面特定的。它是一個僅限Firefox的機制,用於設置觀察點和每個[文檔](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch)它不應該以這種方式使用。毫無疑問,當GM或FF發生變化時,這就是它破裂的原因之一。我會稍微發佈解決方法。 – 2012-02-16 08:24:48