【发布时间】:2013-01-29 14:12:44
【问题描述】:
我正在尝试编写一个跨浏览器用户脚本来隐藏 IMDb 的评分,并将其替换为允许用户稍后对节目/电影进行评分的链接。
在 Opera 中,这种方法已经有效,但 Firefox 和 Chrome 都偶然发现了未定义的函数和/或变量。到目前为止,这是我的代码:
function hideimdbratings() {
if (document.getElementsByClassName("star-box")[0]) {
reenabled = document.getElementsByClassName("star-box")[0].innerHTML;
document.getElementsByClassName("star-box")[0].innerHTML = '<a href="#" id="showvote" onclick="reenableit();">Rate!</a>';
}
}
function reenableit() {
document.getElementsByClassName("star-box")[0].innerHTML = reenabled;
}
window.addEventListener('load', hideimdbratings, false);
第一部分工作正常,hideimdbratings() 被执行并隐藏评级。
但是,点击“Rate!”链接后,Firefox 和 Chrome 都说reenableit() 没有定义。
试试这个:
onclick="document.getElementsByClassName(\"star-box\")[0].innerHTML = reenabled;"
导致他们说 reenabled 未定义。
我尝试将代码直接放入事件监听器:
window.addEventListener("load", function(e) {
// ...
}, false);
以及这种定义函数的方式(对于 Firefox 使用 unsafeWindow):
var window.reenableit = function() { }
但是,无论我做什么,reenableit() 和 reenabled 都未定义。据我了解,函数和变量在 Opera 以外的浏览器中都不是全局的,但我似乎还没有找到解决方案。
我错过了什么/做错了什么?
【问题讨论】:
标签: javascript cross-browser greasemonkey userscripts userjs