2

好吧,这是我的问题。我正在编写一个 Greasemonkey 脚本以在 AJAXified 站点上插入两个 iframe,但 ajaxComplete 陷入循环并生成过多的 iframe(有时是一个,有时是五个等),gener。

我已经完成了我的研究,[我认为]我的问题是我没有正确地将调用绑定到文档,但对此我不确定。我不确定您将如何以与我已有的不同的方式进行操作。如果你们能指出我正确的方向,我将不胜感激。这是有问题的代码:

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 脚本也会在这些 iframe 上触发。

通过添加以下内容来防止这种情况:

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 回答