将Onload事件挂接到Iframe



将两个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。。。

最新更新