關於window.open在不一樣瀏覽器的不一樣點

菜鳥教程: http://www.runoob.com/jsref/met-win-open.htmlhtml

1、基本語法:
window.open(URL,name,specs,replace)
其中:
URL  爲子窗口路徑
name  爲子窗口名字
specs 爲窗口參數(各參數用逗號分隔)ajax

2、返回值:json

返回新建立的window對象。因此能夠用返回的window調用方法。segmentfault

 

第二個對象參數支持不一樣瀏覽器支持程度:瀏覽器

 

http://www.javashuo.com/article/p-hoehmmry-dn.html異步

 

幾種打開新窗口的方式

  1. window.open()
  2. 創造 a 連接,手動觸發 a.click()
  3. 創造 form 表單,手動觸發 form.submit() (創造 form 表單,添加 button 子元素,手動觸發 button.click() 狀況相同,不作區分)

調用情形分組結果

使用 Chrome(70)、Firefox(63)、Edge、IE(9-11) 做爲測試瀏覽器,對如下列舉的打開新窗口的情形作測試。post

x 表示被攔截,√ 表示新窗口正確打開測試

直接打開

即頁面加載後直接調用打開新窗口代碼url

 

方式 Chrome Firefox Edge IE
window.open() x x x x
a.click() x x x x
form.submit() x x x x

 

 

 

 

 

 

用戶點擊行爲

  1. 按鈕點擊後直接打開spa

    即在按鈕被點擊的回調中,直接調用打開新窗口的代碼

    方式 Chrome Firefox Edge IE
    window.open()
    a.click()
    form.submit()
  2. 按鈕點擊後延時打開

    即在按鈕被點擊的回調中,經過 setTimeout 執行打開新窗口代碼

    方式 Chrome Firefox Edge IE
    window.open() × ×
    a.click() × ×
    form.submit() × ×
  3. 按鈕點擊後在異步請求回調中打開

    即在按鈕被點擊的回調中,發送請求,並在請求的回調中執行打開新窗口代碼

    方式 Chrome Firefox Edge IE
    window.open() x x x x
    a.click() x x x x
    form.submit() x x x x

用戶鍵盤行爲

咱們以 input 元素進行測試(其餘元素其餘鍵盤事件也有相同效果),由於最可能使用的狀況爲 input 中使用回車打開新窗口。

  1. input keydown後直接打開

    方式 Chrome Firefox Edge IE
    window.open() x x
    a.click() x x
    form.submit() x x

    其中 ie九、ie10雖然會彈出攔截彈窗提示,可是能打開新窗口

  2. 按鈕點擊後延時打開

    方式 Chrome Firefox Edge IE
    window.open() x x x
    a.click() x x x
    form.submit() x x x
  3. 按鈕點擊後在異步請求回調中打開

    方式 Chrome Firefox Edge IE
    window.open() x x x x
    a.click() x x x x
    form.submit() x x x x

規則總結

  1. 就參與測試的瀏覽器,三種打開新窗口的方式對攔截結果沒有影響。
  2. 全部瀏覽器都不容許非用戶操做引發的打開新窗口。
  3. 全部瀏覽器都不容許在異步 ajax 請求中打開新窗口。
  4. Edge 和 IE 不容許在 setTimeout 中打開新窗口,Chrome、Firefox 容許在用戶操做事件中的 setTimeout 中打開新窗口。
  5. Firefox 和 IE 不容許在用戶鍵盤操做事件中打開新窗口

解決方案

  1. 須要在異步 ajax 請求中打開新窗口的可使用請求前打開新窗口,請求拿到結果後再修改窗口地址的方式。
  2. 須要在鍵盤迴車事件中打開新窗口的推薦使用 form 表單包裝並添加 button 的方式,回車觸發默認的 submit 事件進行新窗口的打開。
function click_fun_new(){
    var tempwindow=window.open();//先打開臨時窗體,因爲是點擊事件內觸發,不會被攔截
    $.ajax({
        'url': '${pageContext.request.contextPath}/activity/savePrizes.htm',
        'type': 'post',
        'dataType': 'json',
        'data': data,
        success: function (data) {
            tempwindow.location = "www.baidu.com";//當回調的時候更改臨時窗體的路徑
        },
        error:function(){
            tempwindow.close();//回調發現無需打開窗體時能夠關閉以前的臨時窗體
        }
    });

--------------------- 
做者:Elong_Deo 
來源:CSDN 
原文:https://blog.csdn.net/qq525099302/article/details/51338879 
版權聲明:本文爲博主原創文章,轉載請附上博文連接!
相關文章
相關標籤/搜索