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()
実行され、評価が非表示になります。
reenableit()
しかし、「Rate!」リンクをクリックすると、Firefox と Chrome の両方がそれが定義されていないと言います。
これを試す:
onclick="document.getElementsByClassName(\"star-box\")[0].innerHTML = reenabled;"
reenabled
定義されていないと言う結果になります。
コードをイベントリスナーに直接入れてみました:
window.addEventListener("load", function(e) {
// ...
}, false);
関数を定義するこの方法 (Firefox の unsafeWindow を使用):
var window.reenableit = function() { }
しかし、私が何をしても、 と の両方reenableit()
がreenabled
未定義のままです。私が理解していることから、Opera 以外のブラウザーでは関数も変数もグローバルではありませんが、まだ解決策を見つけることができないようです。
私は何が欠けていますか/間違っていますか?