Jquery iframe内容更改事件?
如何检测iframe内容何时发生了更改,并根据下面的更改伪代码执行操作Jquery iframe内容更改事件?,jquery,iframe,Jquery,Iframe,如何检测iframe内容何时发生了更改,并根据下面的更改伪代码执行操作 $('#waframe').contents().change(function(){ //do stuff }); 嗯,浏览器似乎在包含页面的上下文中的元素上生成了一个“加载”事件。当“src”更改时,“load”将触发;不确定iframe自身更改时是否触发 编辑:是,当页面“内部”重新加载时,它似乎会触发 因此,您可以尝试: $('iframe#yourId').load(function() { al
$('#waframe').contents().change(function(){
//do stuff
});
嗯,浏览器似乎在包含页面的上下文中的
元素上生成了一个“加载”事件。当“src”更改时,“load”将触发;不确定iframe自身更改时是否触发
编辑:是,当页面“内部”重新加载时,它似乎会触发
因此,您可以尝试:
$('iframe#yourId').load(function() {
alert("the iframe has been loaded");
});
我在做一个小把戏(肮脏但有效):)来显示加载对象function changeDet(old){ //detect src changes
if($("iframe#ifID").attr('src') != old){
$("iframe#ifID").width(0); //error if i hide ...?
}
setTimeout('changeDet("' + $("#db").attr('src') + '")',10);
}
var df = $('#iframe#ifID');
df.load(function(){ //content loaded
setTimeout('$("#db").width(var_default_width);',100);
});
changeDet();
$(function(){
//jq stuffs...
})
</script>
函数changeDet(旧){//检测src更改
if($((“iframe#ifID”).attr('src')!=old){
$(“iframe#ifID”).width(0);//如果隐藏…,则出错。。。?
}
setTimeout('changeDet('+$(“#db”).attr('src'+')”),10);
}
var df=$('iframe'ifID');
load(函数(){//已加载内容
setTimeout('$(“#db”).width(var_default_width);',100);
});
changeDet();
$(函数(){
//jq的东西。。。
})
您可以使用此命令在发生更改时触发事件。。适用于IE8和firefox
if(document.addEventListener){
yourIFrameObject.contentWindow.document.addEventListener('keyup', yourFunction, false);
// window.frames[0].document.addEventListener('keyup', yourFunction, false);
}
else{
//for IE8
yourIFrameObject.contentWindow.document.attachEvent('onkeyup', yourFunction);
}
如果需要,您可以使用
mouseup
语句这在safari或opera中似乎不起作用我没有检查ie或chrome yetHmm。微软的文档对此主题并不清楚。为了测试它,我只做了一个带有iframe的小页面,我将iframe指向我的一个随机域。在测试页面中,我刚刚在iframe元素上为“load”设置了一个jQuery事件监听器。它在ff中确实可以工作,这很酷,但我需要一些能够在整个电路板上工作的东西,或者至少是我在Chrome 24.0.1312.XX、Opera 12.14、Epiphany(GNOME浏览器)和Mozilla 18.0.2中测试过的大部分东西。它适用于所有这些浏览器。我的操作系统是Linux 12.04 Ubuntu。谢谢@Pointy。这不太可行,因为您必须每10毫秒进行一次字符串比较,当文档大小增加到MB时,这很容易成为负担。避免在setTimeout
中使用字符串,这是a)安全风险,b)速度慢,c)JS解释器无法正常处理。