什么是将两个onload事件挂钩到iframe并在不同的onload尝试上发生的javascript代码。
我希望第一个onload除了下一个重定向onload之外什么都不做。这可能吗?
答案 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