2012-01-26 19 views
0

私は別のウィンドウを開くbottonを持つWebページを持っています。ブラウザウィンドウを閉じてください

ボタンがクリックされ、新しいページが開いているとき、ボタンをクリックすると(ボタンをクリックするだけで必要なページが開かれるため)、ボタンを無効にします。 window.open()を使用し、windows.showModalDialog()ではなく、両方のページで作業する必要があります。

2番目のページが閉じられたら、最初のページのボタンを再度有効にする必要があります。

私は」このようないろいろ書いてみました:

var win = window.open("SecondPage.htm"); 
    // disable button   
    while (!win.closed) { 
     setTimeout('', 2000); 
    } 
    // re-enable button 

しかしwhileループを使用すると、あまりにも多くのブラウザが遅くなり、それが最初のページ上で動作するように、実際には不可能だ...

あります私の問題のより良い解決策?

答えて

0
setTimeout('', 2000) 

あなたのwhileループが回転し続け、そして実際ので、ブラウザが遅く、すべてのCPUを消費しますsleep()

ではありません。

ベター:

var win = window.open("SecondPage.htm"); 
// disable button   
setTimeout('enableButtonIfWindowClosed', 2000); 

function enableButtonIfWindowClosed { 
    if (windowClosed()) { 
    enableButton(); 
    } 
    else { 
    setTimeout('enableButtonIfWindowClosed', 2000); 
    //function recalls the function itself 
    } 
} 
+0

完璧!どうもありがとうございました! :) – davioooh

+0

睡眠について話す...これはまた助けになるかもしれません:http://www.phpied.com/sleep-in-javascript/ – davioooh

+0

いいえ、それは同じ問題を抱えています:ループは条件が終わるまで無限にループし続けます会ったCPU使用率が高くなり、ブラウザがハングします。記事のコメントを読んで、何人かの人々もそれに言及します。 – Konerak

0

私はあなたがunloadまたはbeforeunloadイベントにイベントをバインドすることができると思います:

win.onunload = function() { 
    // re-enable button 
}; 

しかし、ユーザーがウィンドウ内に別のページをロードする場合、これはとも呼ばれますイベントハンドラ内でwin.closedをチェックする必要があります。

0

ページを更新するJavaScriptユーザーによって扱う場合はこの資料の内容は、サーバーで無効にボタンを2ページのリンクメイクAJAX呼び出しの使用時のクリックを保存fail.Soと

 //page 1 script 
    var win = null;  
$("#link1").click(function(){ 
    $("#button_id").attr("disabled", "disabled");   
    //ajax to server and save like button1 is disabled 
    win = window.open("URL2"); 
    win.onunload = function() { 
    //enable the button 1 
    }  
}); 


    //In the page 2 script 
    window.unload = function() { 
    //ajax to button is enabled 
    } 
のようなボタンのボタン属性を行います
0

このKonerakのコードは、CPUとメモリの無駄な問題を解決しません。 setTimeoutを使用する場合は、clearTimeout()も使用する必要があります。そうでない場合は、top.windowが開いている限りタイマーを使用してください。

var win = window.open("SecondPage.htm"); 
var delay; 
// disable button   

delay=setTimeout('enableButtonIfWindowClosed', 2000); 
function enableButtonIfWindowClosed { 
    if(delay) clearTimeout('delay'); 
    if (windowClosed()) { 
    enableButton(); 
    } 
    else { 
    setTimeout('enableButtonIfWindowClosed', 2000); 
    //function recalls the function itself 
    } 
} 

と、より洗練された:

var win = window.open("SecondPage.htm"); 
var delay; 
// disable button 
delay=setInterval('enableButtonIfWindowClosed', 2000); 
function enableButtonIfWindowClosed { 
    if (windowClosed()) { 
    if(delay) clearInterval('delay'); 
    enableButton(); 
    } 
} 

ないCPUを消費していないメモリの無駄のようなコードを修正してください。

関連する問題