【发布时间】:2010-03-12 16:04:03
【问题描述】:
如何检测 iframe 内容何时发生变化,并根据下面的更改伪代码执行某些操作
$('#waframe').contents().change(function(){
//do stuff
});
【问题讨论】:
如何检测 iframe 内容何时发生变化,并根据下面的更改伪代码执行某些操作
$('#waframe').contents().change(function(){
//do stuff
});
【问题讨论】:
好吧,浏览器似乎在包含页面上下文中的<iframe> 元素上生成了一个“加载”事件。当“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>
【讨论】:
setTimeout 中使用字符串a) 存在安全风险,b) 速度慢,c) JS 解释器无法正常处理。
您可以使用它来触发更改事件。适用于 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 语句
【讨论】: