2

さて、これが私の問題です。AJAX 化されたサイトに 2 つの iframe を挿入する Greasemonkey スクリプトを作成していますが、ajaxComplete がループに陥り、過剰な数の iframe (場合によっては 1 つ、場合によっては 5 つなど) を生成します。

私は調査を行いましたが、私の問題は、ドキュメントへの呼び出しを適切にバインドしていないことですが、これについては確信が持てません。あなたが私がすでに持っているものとは違う方法でそれを行うかどうかはわかりません。皆さんが私を正しい方向に向けることができれば、私は感謝しています。問題のあるコードは次のとおりです。

function OnLoadWidgets() {
    var tempSC = document.createElement("div");                                        
        tempSC.id = "SCWidget";
        tempSC.innerHTML = "..."
    document.getElementById("content-right").appendChild(tempSC);
    var tempMC = document.createElement("div");                                        
        tempMC.id = "MCWidget";
        tempMC.innerHTML = "..."
   document.getElementById("content-right").appendChild(tempMC);

}   

unsafeWindow.jQuery(document).ajaxComplete(function()
{   
    var existingSCPlayer = document.getElementById("SCWidget");                     
    if(typeof(existingPlayer) == "undefined")
    {
        OnLoadWidgets();
    }
});

残りのコードは、http: //userscripts.org/scripts/show/127312で確認できます。

また、これを機会に、ご尽力いただきました皆様に感謝の意を表したいと思います。本当に感謝してもしきれません。スタック == 命の恩人

4

1 に答える 1

0

(1)ターゲットサイトhypem.comは独自のiframeを使用しており、Greasemonkeyスクリプトはそれらに対しても起動します。

次を追加してこれを防ぎます。

if (window.top != window.self)  //-- Don't run on frames or iframes.
    return;

スクリプトの上部近く。


(2)コードに変数名のタイプミスがあります。existingSCPlayerexistingPlayer


(3)重複チェックをもう少し包括的にするように調整します。このコードを使用します:

unsafeWindow.jQuery (document).ajaxComplete ( function () {
    var existingSCPlayer = document.getElementById ("SCWidget");
    var existingMCPlayer = document.getElementById ("MCWidget");
    if ( ! existingSCPlayer  &&  ! existingMCPlayer) {
        OnLoadWidgets();
    }
} );
于 2012-04-13T05:28:32.183 に答える