0

2 つの onload イベントを iframe にフックし、異なる onload 試行で発生する JavaScript コードは何ですか?

最初のオンロードで何もしないで、次のオンロードでリダイレクトしたい。これは可能ですか?

4

1 に答える 1

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

動作中の JSFiddle...

于 2012-09-19T20:15:15.560 に答える