Hook Onload事件到Iframe

时间:2012-09-19 20:09:07

标签: php javascript onload

什么是将两个onload事件挂钩到iframe并在不同的onload尝试上发生的javascript代码。

我希望第一个onload除了下一个重定向onload之外什么都不做。这可能吗?

1 个答案:

答案 0 :(得分:1)

新答案

重新阅读你的问题之后,我意识到你希望这些功能能够触发不同的事件。这更容易实现:

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

A working JSFiddle...