2 つの onload イベントを iframe にフックし、異なる onload 試行で発生する JavaScript コードは何ですか?
最初のオンロードで何もしないで、次のオンロードでリダイレクトしたい。これは可能ですか?
2 つの 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