将两个onload事件挂接到iframe并在不同的onload尝试中发生的javascript代码是什么。
我希望第一个加载什么都不做,但下一个加载重定向。这可能吗?
新答案
重读您的问题后,我意识到您希望函数在单独的事件上触发。这更容易实现:
var ifr = document.getElementById('daiframe');
ifr.onload = function(){
ifr.onload = function(){
// do the redirect here
};
};
ifr.src = 'http://initial.url/';
这里最重要的是,像我一样,在iframe获得初始URL之前设置上面的onload代码。假设您直接编写iframe HTML代码,请确保SRC属性指向about:blank
。
编辑:根据评论中提供的信息和我之前的警告
假设PHP部分如下所示:
$code = '<iframe src="http://some.url/"></iframe>';
echo $code;
该代码需要更改为:
$code = '<iframe src="http://some.url/"></iframe>';
echo str_replace('<iframe ', '<iframe onload="ifrLoaded();" ', $code);
?><script type="text/javascript">
var alreadyLoaded = false;
function ifrLoaded(){
if(alreadyLoaded){
// do your redirect
}else{
alreadyLoaded = true;
}
}
</script>
旧答案
像这样的东西?
function appendEvent(el, name, fn){
if(typeof el[name] == 'function'){
var oldfn = el[name];
el[name] = function(){
oldfn.apply(this, arguments);
fn.apply(this, arguments);
};
}else{
el[name] = fn;
}
}
var ifr = document.getElementById('daiframe');
appendEvent(ifr, 'onload', function(){});
appendEvent(ifr, 'onload', function(){ /* do the redirect */ });
ifr.src = 'http://target.url/'; // since onload fires only after the URL is set
一个正在工作的JSFiddle。。。