Javascript Greasemonkey脚本停止工作,出现错误:unsafeWindow.document.watch不是函数
我对这一切都很陌生,但是这个脚本曾经在firefox上工作,最近停止了。它将Gmail收件箱中的未读计数放在窗口/标签标题的开头Javascript Greasemonkey脚本停止工作,出现错误:unsafeWindow.document.watch不是函数,javascript,firefox,greasemonkey,Javascript,Firefox,Greasemonkey,我对这一切都很陌生,但是这个脚本曾经在firefox上工作,最近停止了。它将Gmail收件箱中的未读计数放在窗口/标签标题的开头 unsafeWindow.document.watch('title', function(prop, oldval, newval) { if (matches = newval.match(/Inbox \((\d+)\)/)) { names = newval.match(/\w+/) newval = '(' + matches[1] + '
unsafeWindow.document.watch('title',
function(prop, oldval, newval) {
if (matches = newval.match(/Inbox \((\d+)\)/)) {
names = newval.match(/\w+/)
newval = '(' + matches[1] + ') unread - ' + names[0] + ' Inbox';
}
return (newval);
});
运行此操作时,错误控制台显示“unsafeWindow.document.watch不是函数”。我试着在谷歌和这里搜索,但没有找到答案。任何帮助都将不胜感激 看起来Greasemonkey的沙箱(XPCNativeWrapper)已经改变了。这似乎是一个可能的错误,但我目前没有看到任何未解决的问题 另外,
watch()
是非标准的(可能会消失),并且符合is标准
同时,通过将代码注入页面范围,可以使代码重新工作,如下所示:
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,不应该是特定于站点或页面的。我会在页面源代码中寻找什么来识别新函数?是的,你是对的<代码>监视()不是特定于页面的。这是一种仅用于设置观察点的Firefox机制,因此不应以这种方式使用。毫无疑问,这也是通用汽车或FF更换后其破产的部分原因。我将在稍后发布一个解决方案。