1. 程式人生 > >瀏覽器開啟新視窗被攔截問題

瀏覽器開啟新視窗被攔截問題

1. window.open() 方法和 form表單的submit方法

需要使用者點選事件觸發,將其直接寫在點選事件內部,未被攔截

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    </style>
</head>
<body>
    <button id="btn">點選</button>
    <script type="text/javascript">
        var btn = document.getElementById('btn')
        btn.onclick = function() {
            setTimeout(function(){
                window.open('http://www.baidu.com')
            },1000)
        }
    </script>
</body>
</html>

如果在js中的ajax請求的success方法內部使用這兩種方法均會被攔截,將ajax請求設定為同步,即可開啟視窗不被攔截


        let requestUrl = commonRequestUrl;
        let msg ='';
        $.ajax({
          async: false,
          type: "GET",
          url: requestUrl,
          dataType: "json",
          success: function(data) {
            let code = data.code;
            let msg = data.msg;
            let content = data.content;
            msg = content.msg
            window.open(`http://127.0.0.1/assets/index.html?msg=${msg}`);
          }
        });

2. a連結開啟新標籤頁的click方法

(1)如果需要在點選事件的時候進行一些操作,且不需要考慮傳送請求的情景,可在a連結的click方法內進行操作

<a href='http//:www.baidu.com' onclick='goBaidu' target='_bank'>

// 該方法在原頁面執行,與新開頁面無關
goBaidu() {
    localstorage.setItem('name': 'zs')
}

(2)如果需要等待ajax請求或者程式碼執行結果 ,在a的click方法內部直接使用window.open()或者表單的submit即可(不要寫在ajax方法內部)

程式碼同上第二個程式碼段