好的,这是我的问题。我正在编写 Greasemonkey 脚本以在 AJAX 化网站上插入两个 iframe,但 ajaxComplete 陷入循环并生成过多的 iframe(有时是一个,有时是五个,等等),gener.
我已经完成研究,[我认为]我的问题是我没有正确地将调用绑定(bind)到文档,但我不确定这一点。我不确定你会如何做与我已经有的不同。如果你们能指出我正确的方向,我将不胜感激。这是有问题的代码:
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
也想借此机会感谢大家的辛勤工作。怎么感谢都不为过,真的。堆栈==救生员
最佳答案
(1) 目标站点,hypem.com ,使用它自己的 iframe,您的 Greasemonkey 脚本也会在这些 iframe 上触发。
通过添加来防止这种情况:
if (window.top != window.self) //-- Don't run on frames or iframes.
return;
靠近脚本的顶部。
(2) 代码中有一个变量名错字。 existingSCPlayer
与 existingPlayer
。
(3) 细化重复检查以使其更具包容性。使用此代码:
unsafeWindow.jQuery (document).ajaxComplete ( function () {
var existingSCPlayer = document.getElementById ("SCWidget");
var existingMCPlayer = document.getElementById ("MCWidget");
if ( ! existingSCPlayer && ! existingMCPlayer) {
OnLoadWidgets();
}
} );
关于javascript - 客户端 ajaxComplete 调用生成无限 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10135046/