0

これが私の現在のコードですが、closeWindow関数は新しいタブが開く前に実行されます。

    $(document.body).append('<iframe width="500px" height="500px" id="pcl_frame" style="display:none;"></iframe>');
    $('#pcl_frame').attr('src', data['url']);
    $('#pcl_frame').load(function() {
        // Load page
        document.getElementById('pcl_frame').contentWindow.CreateCBTPlayer(data['code'],"new");

        // Close current windows after the above tab/window opens
        closeWindow(); // has a 2 second delay
}); 

上記のコマンドが最初に新しいタブ/ウィンドウを開くのを待ってから、新しいウィンドウを開くために使用された現在のタブを閉じる方法はありますか?

また、CreateCBTPlayer機能を変更することはできません。

免責事項

私がしていることはあまり論理的ではないことは知っていますが、それは私が使用しなければならない古いシステムを回避するために行われなければなりません。

4

2 に答える 2

1

完全にはわかりませんが、次のようなことができると思います。

(function(old_window) { 
    $(new_window).load(function() {
         old_window.close();
    });
})(window);

外部の自己呼び出し無名関数は、ローカル変数old_windowを現在のウィンドウオブジェクトにバインドするために使用されます。内部関数は、そのバインディングをキャプチャしてウィンドウを閉じるクロージャです。このクロージャは、新しいウィンドウのonloadイベントにバインドされています。したがって、新しいウィンドウが読み込まれると、現在のウィンドウが閉じます。

于 2012-10-19T00:03:59.447 に答える
1

何をしようとしているのかわかりませんが、onload関数の後にソースを設定して適切にload()起動する必要があると思います。非推奨であり、とにかくネイティブオブジェクトを使用しているので、なぜプレーンなjsでそれを行います:

var iframe = document.createElement('iframe');
    iframe.width = '500px';
    iframe.height = '500px';
    iframe.id = 'pcl_frame';
    iframe.style.display = 'none'; //note that not all browsers load hidden content
    iframe.onload = function() {
        this.contentWindow.CreateCBTPlayer(data['code'],"new");
        closeWindow();
    }

$('body').append(iframe).attr('src', data['url']);
于 2012-10-19T00:09:38.387 に答える