web-dev-qa-db-ja.com

Javascriptの「アラート」ブロッキングの性質をエミュレートする

ユーザーが入力するまでスクリプトの実行を「ブロック」するカスタムモーダルメッセージを作成することは可能ですか?

たとえば、ネイティブウィンドウアラート/プロンプト機能を使用せずにこれを実現するにはどうすればよいですか?

setInterval(function(){ 
     alert('Click OK to Continue');  // timing stops until user hits ok
},4000);

カスタムダイアログでユーザー入力時にコールバック関数を呼び出すことができることは知っていますが、このブロック動作を強制できることに興味があります

19
lostsource

ユーザーが入力するまでスクリプトの実行を「ブロック」するカスタムモーダルメッセージを作成することは可能ですか?

いいえ。ネイティブポップアップほど効果的に実行またはユーザーインタラクションをブロックする方法はありません(カスタムポップアップを使用すると、ユーザーは常に開発者ツールを使用してそれから抜け出すことができるため)。

ただし、pstが質問のコメントで述べているように、非同期ライトボックスは面倒ではなく、ポップアップと同じくらいユーザーの操作をブロックするのにほぼ効果的です。気に入ったライトボックスを提供するライブラリを見つけて実行することをお勧めします。

たとえば、ネイティブウィンドウアラート/プロンプト機能を使用せずにこれを実現するにはどうすればよいですか?

そのコードを使用して、withネイティブウィンドウアラート/プロンプト関数( このフィドル を参照)でさえ、あなたが言うことを実行することはできません=-ポップアップを閉じる前に4秒待ちます)。次のものが必要です。

_function timeoutFunction() {
    alert('Click OK to Continue');  // timing ACTUALLY stops until user hits ok
    setTimeout(timeoutFunction, 4000);
}
setTimeout(timeoutFunction,4000);
_

これは、ネイティブポップアップなしでは実装できないものです(正確には、ライトボックスについては上記を参照してください)。

while(true)ループでさえ、一般的にポップアップと同様にブロックされません-Firefoxには、少なくとも、長すぎるとポップアップする「スクリプトの停止」メッセージがあり、他の主要なブラウザはそうしていると確信しています。あまりにも。

9
Jeff