ホームページ  >  記事  >  ウェブフロントエンド  >  Ajaxリクエストレスポンスでwindow.openを使用して新しいウィンドウを開くことをインターセプトする解決策

Ajaxリクエストレスポンスでwindow.openを使用して新しいウィンドウを開くことをインターセプトする解決策

高洛峰
高洛峰オリジナル
2017-01-09 14:15:171397ブラウズ

1. 問題の説明

ajax 非同期リクエストが成功した後、URL を開くために新しいウィンドウを開く必要がありますが、これはブラウザーによってインターセプトされ、ユーザーが必要とします。クリックしてください。

2. 問題分析

ブラウザが新しく開かれたウィンドウをインターセプトする理由は、その操作がユーザーによってアクティブにトリガーされていないため、たとえ ajax コールバック関数がシミュレートしたとしても、安全ではないと考えてインターセプトするためです。クリックの実行や、送信 (trigger('click')) などのユーザー アクションも、ブラウザーによってユーザーによってアクティブにトリガーされていないとみなされるため、安全に実行できず、インターセプトされます。

手順:

1. 0cccd343ebcf339b582ab20b8ce6e78f5db79b134e9f6b82c0b36e0489ee08ed で指定された fun メソッドでウィンドウが呼び出された場合) は、ブラウザーがアクティブであると認識するため、インターセプトされません。 ただし、ajax リクエストの応答でウィンドウを開くとインターセプトされます。

2. 新しいウィンドウを開く代わりに元の Web ページのアドレスを変更する場合は、window.location = newurl を使用してこれを実現し、傍受されないようにすることができます。

3. 解決策

ajax リクエストの前に、window.open を使用して空のウィンドウを開き、ajax 応答関数でウィンドウの location 属性を新しい URL に設定します。

次のようなコード例:

function fun(){
var tmpWin =window.open()
ajax(xxx, handle(){
//回调函数。这是伪代码,语法不准。
var newurl = xxxx
tmpWin.location = newurl;
})
}

上記のメソッドには問題があります。最初に空のウィンドウが開かれ、ajax リクエストが失敗した場合 (ネットワークまたはビジネス ロジックの問題)、何も行われないためです。新しいウィンドウで通常 結果は、ユーザーに混乱を引き起こす可能性があることを示しています。
1 つの解決策は、ajax に問題がある場合、 tmpWin.document.write("サーバー処理例外"); などのプロンプトを表示することを検討することです

ajax の応答時間が長すぎるのを防ぐためにも、ウィンドウが作成されたら、すぐにプロンプ​​トを表示します tmpWin.document.write("サーバーが処理中です。お待​​ちください");

後で ajax が正常に戻った場合、場所の値が設定されているため、元の出力情報は上書きされます新しいページの情報によります。

別の方法もありますが、これにも欠点があります:

ajax は同期リクエストとして設定できるため、ajax リクエストの後に window.open を使用して新しいウィンドウを開くことができます。例:

function fun(){
var result;
ajax({ //需要设置同步请求
.....
result = xxx
.......
})
if(result){
window.open(xxxx)
}
}

上記のアプローチは、ajax リクエストの結果を判断した後に新しいウィンドウを開くため、上記の問題を回避します。
ただし、これは同期リクエストであるため、サーバーの応答時間が長すぎると、まずインターフェイスが一時停止し (ユーザー エクスペリエンスが低下し)、次に新しいウィンドウがブロックされるという問題が見つかりました。 。

サーバーがすぐに戻る場合のみ問題ありません。 テスト中、サーバー コードの処理中に 1 秒スリープしたところ、新しいウィンドウがブロックされていることがわかりました。

4. まとめ

まとめると、ajax が戻った後に新しいウィンドウを開くための特に完璧な方法はないことがわかります。具体的には、自社システムの業務特性に応じた適切な対応が必要です。

上記は、編集者が紹介したAjaxリクエストレスポンスでのwindow.openを使用した新しいウィンドウを開くインターセプトの解決策です。ご質問があれば、メッセージを残してください。編集者は全員にすぐに返信します。また、PHP 中国語 Web サイトをサポートしていただきありがとうございます。

Ajax リクエスト応答で window.open を使用して新しいウィンドウを開き、インターセプトされる問題を解決する方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。