queryでは、ブラウザにブロックされずにページが新しく開くことを保証する方法

3640 ワード

jqueryでは、ブラウザにブロックされずにページが新しいウィンドウを開くことを保証する方法
最近注文書の提出について書いていますが、淘宝や京東の注文書のような操作をしています.提出ボタンをクリックすると、ページをポップアップする必要がありますが、注文書は複雑な操作なので、簡単にボタンをクリックしてwindowを実行するわけではありません.Open()またはwindowを実行します.location.hrefは、様々なブラウザのセキュリティメカニズムの問題を解決することができますが、ajaxリクエストを行う際にリクエストが成功した後、ajaxの戻り値を得る必要があります.ページのジャンプを行うには、ジャンプ時に戻り値を使用する必要があります.そうしないと、リクエストは意味がありません.しかし、このようにすると、ジャンプ操作を呼び出すには、私たちが書いたfunctionで操作を行う必要がある場合、ブラウザが自動的に実行されるポップアップ広告処理として扱われるため、ブラウザのブロックが発生します.次のようになります.
function test(){

...    
$.ajax({
                type: "post",
                dataType: "json",
                //async: false,
                url: _base+"/order/orderCommit",
                data:{},
                success: function(data){
                    var key=data.data;
                    window.location.href = _base
                    + "/order/toOrderPay?orderKey="+key;
                    //       
                    //window.open(_base+ "/order/toOrderPay?          orderKey="+key);

                }
            });
            }

次の方法を実行すると、ブラウザが自動的にこの方法をマスクしていることがわかります.では、この問題を解決するには、最初の方法はユーザーのクリックトリガでなければならないことを保証することです.つまり、click方法の最初のレベルでジャンプ方法を保証しなければなりませんが、ajaxのデータが必要です.どうすればいいですか.ajaxはデフォルトで非同期で実行されていることはよく知られていますが、ajaxの外で実行したい場合は、ajaxがまだ実行されていないのにジャンプしてパラメータが空になっている場合は、どのように解決しますか?ajaxのデフォルトが非同期である以上、同期に変更することができます.問題は次のように解決されます.
function test(){

...    
var key;
$.ajax({
                type: "post",
                dataType: "json",
                async: false,//     
                url: _base+"/order/orderCommit",
                data:{},
                success: function(data){
                    key=data.data;


                }
            });
window.location.href = _base
                    + "/order/toOrderPay?orderKey="+key;
                    //       
                    //window.open(_base+ "/order/toOrderPay?          orderKey="+key);
            }

テストしてもいいですよ...もう一つの方法は、(参考にしている人のほうが、もっと簡単です.http://www.cnblogs.com/rainbowzc/p/3603209.html) window.Openはjavascript関数で、jsでwindowを直接呼び出す場合は、新しいウィンドウを開くか、元のウィンドウを変更する役割を果たします.Open()関数は新しいウィンドウを開き、ブラウザがあなたをブロックします.では、どのように避けるか、興味のある友达は、この文章があなたの勉強に役立つかもしれません.
window.Openはjavascript関数で、この関数の役割は新しいウィンドウを開くか、元のウィンドウを変えることですが、一般的には新しいウィンドウを開くために使われています.元のページアドレスを変更するため、別の関数があります.それはwindowです.locationでは、Webアドレスをリダイレクトして、別のページにジャンプすることができます.私が今言いたいのはwindowです.Open関数のいくつかの使用ポリシーは、一般的にjsでwindowを直接呼び出す場合に使用されます.Open()関数は新しいウィンドウを開き、ブラウザはあなたをブロックし、広告などのユーザーが得たくないフォームをポップアップすると思っているので、ブラウザにブロックさせたくない場合は、この関数をユーザーがクリックしたときにトリガーすることができます.これにより、ブラウザはユーザーが直接ユーザーにポップアップするのではなく、このページにアクセスしたいと思っています.だからよく使われる方法は、ハイパーリンクにonclickイベントを追加することです.このようにユーザーがこのハイパーリンクをクリックすると、ブラウザは新しいリンクを開くと思っているので、ブロックしません.しかし、时にはウィンドウをポップアップしようとすることがありますが、onckickイベントが実行された后、弾き出すことができます.この时、ブラウザにブロックされます.私たちは次の方法で避けることができます.まずwindowを使うことです.Openウィンドウを開き、アドレスを変更します.例えばvar tempwindow=window.open(‘_blank’);ウィンドウを開いてtempwindowを使います.location=’http://www.XXX.com‘;このウィンドウをxxxサイトにジャンプさせると、xxウィンドウをポップアップする効果が現れます.