最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Chrome不支持showModalDialog模態(tài)對(duì)話框和無(wú)法返回returnValue問題的解決方法

 更新時(shí)間:2016年10月30日 00:24:00   作者:快樂喬巴  
上個(gè)禮拜修改測(cè)試一個(gè)后臺(tái)管理項(xiàng)目,在測(cè)試與各個(gè)瀏覽器兼容性的時(shí)候,發(fā)現(xiàn)在chrome瀏覽器下showModalDialog方法顯示的并不是模態(tài)對(duì)話框,就像新打開一個(gè)頁(yè)面一樣,父窗口仍然可以隨意獲取焦點(diǎn),并可以打開多個(gè)窗體,而且返回值returnValue也無(wú)法返回,一直是undefined

What?模態(tài)對(duì)話框失效了?

上個(gè)禮拜修改測(cè)試一個(gè)后臺(tái)管理項(xiàng)目,在測(cè)試與各個(gè)瀏覽器兼容性的時(shí)候,發(fā)現(xiàn)在chrome瀏覽器下showModalDialog方法顯示的并不是模態(tài)對(duì)話框,就像新打開一個(gè)頁(yè)面一樣,父窗口仍然可以隨意獲取焦點(diǎn),并可以打開多個(gè)窗體,而且返回值returnValue也無(wú)法返回,一直是undefined。這么多問題很令人頭疼,下面就各個(gè)主流最新版的瀏覽器進(jìn)行了一下測(cè)試。

瀏覽器 是否支持 狀態(tài)
IE9
Firefox13.0
safari5.1
chrome19.0 × 并不是模態(tài)對(duì)話框,而是open了一個(gè)新窗體
Opera12.0 × 什么也發(fā)生,連個(gè)窗體都不彈

Chrome到底打開的是什么

因?yàn)榇蜷_的不是模態(tài)對(duì)話框,而是像open了一個(gè)新窗體一樣,那只要驗(yàn)證一下子窗體window.opener是否為空就明白了。

<script type="text/javascript">
    alert(window.opener);
</script>

在chrome中,顯示的是一個(gè)[object window]對(duì)象,而IE則是undefined?,F(xiàn)在知道原來(lái)chrome將showModalDialog當(dāng)作window.open來(lái)處理了。也就是說我們完全可以用window.opener來(lái)操作chrome瀏覽器下子窗體。這里還發(fā)現(xiàn)個(gè)很有趣的現(xiàn)象,firefox中測(cè)試window.opener也并不為空,于是我又測(cè)試了下使用showModalDialog在子窗體中關(guān)于window.opener和window.dialogArguments在各個(gè)瀏覽器里的狀況,由于Opera瀏覽器連個(gè)窗體都不彈,下面測(cè)試就剔除它了。

說明下父窗體的showModalDialog的方法中arguments傳遞是window對(duì)象,下面是測(cè)試的結(jié)果:

瀏覽器 模態(tài)對(duì)話框 window.opener window.dialogArguments returnValue
IE9 undefined [object Window]
Firefox13.0 [object Window] [object Window]
safari5.1 [object Window] [object Window]
chrome19.0 × [object Window] undefined ×

以上是我測(cè)試的結(jié)果,各個(gè)瀏覽器所支持的程度還是不一樣的。還要說一下Firefox瀏覽器下,子窗體假如刷新的話window.dialogArguments照樣會(huì)丟失,變成undefined。以上結(jié)果中我們可以看出返回值returnValue就只有chrome瀏覽器返回的是undefined,其他瀏覽器都沒有問題。那該如何解決這個(gè)問題呢?

解決returnValue問題

通過以上的種種測(cè)試,我們已經(jīng)知道chrome的showModalDialog方法很像執(zhí)行了window.open方法,那么我們可以利用window.opener來(lái)實(shí)現(xiàn)window.returnValue的功能。

注意:temp=Math.random()這個(gè)隨機(jī)參數(shù)是為了解決緩存問題,不少朋友測(cè)試出undefined是因?yàn)槭蔷彺娴膯栴}。 追加于2012-10-17

父窗體部分js代碼:

window.onload = function () {
  var returnValue = window.showModalDialog("son.html?temp=" + Math.random(), window);
  //for chrome
  if (returnValue == undefined) {
    returnValue = window.returnValue;
  }

  alert(returnValue);
}

子窗體部分js代碼:

if (window.opener != undefined) {
    //for chrome
    window.opener.returnValue = "opener returnValue";
}
else {
    window.returnValue = "window returnValue";
}
window.close();

這樣也在IE,FireFox,Chrome,Safari等瀏覽器下都可以通用了。

最后

最后有人要問那該如何實(shí)現(xiàn)模態(tài)對(duì)話框呢?我覺得應(yīng)該是可以用一些js技巧去實(shí)現(xiàn)的,但是我不并推薦這樣做,我也查詢了很資料都不能很好的解決這個(gè)問題。當(dāng)然,也可以有其他一些思路,比如為了不彈出更多的窗體,可以在點(diǎn)擊打開窗體的時(shí)候?qū)⒛莻€(gè)open按鈕設(shè)置為不可用,只有關(guān)閉了子窗體再設(shè)置成可用。這些大家都可以自己去實(shí)踐下,或許有更好的方法。

最后我想說的是在當(dāng)今的網(wǎng)頁(yè)設(shè)計(jì)中很流行用div在頁(yè)面內(nèi)去模擬一個(gè)窗體,樣式自定義,交互都很不錯(cuò),不一定非要用模態(tài)窗體,如何模擬網(wǎng)上一大把,今天就寫到這里吧,有什么錯(cuò)誤的地方請(qǐng)大家多指正~~

相關(guān)文章

  • javascript移動(dòng)開發(fā)中touch觸摸事件詳解

    javascript移動(dòng)開發(fā)中touch觸摸事件詳解

    這篇文章主要為大家詳細(xì)介紹了javascript移動(dòng)開發(fā)中touch觸摸事件,感興趣的小伙伴們可以參考一下
    2016-03-03
  • return false,對(duì)阻止事件默認(rèn)動(dòng)作的一些測(cè)試代碼

    return false,對(duì)阻止事件默認(rèn)動(dòng)作的一些測(cè)試代碼

    很明顯我們每個(gè)函數(shù)都返回false,如果返回值可以阻止事件默認(rèn)動(dòng)作,那么文本框?qū)o(wú)法輸入任何內(nèi)容。 看下面我測(cè)試的結(jié)果,注意紅的部分。
    2010-11-11
  • javascript控制臺(tái)詳解

    javascript控制臺(tái)詳解

    本文是寫在2011年,主要介紹 “Firefox” 瀏覽器插件 “Firebug” 的操作,如今主流瀏覽器對(duì)控制臺(tái)都已經(jīng)提供了很好的支持。我自己用的最多是谷歌的 “chrome” 瀏覽器,下面也用 “chrome” 瀏覽器來(lái)調(diào)試。
    2015-06-06
  • js實(shí)現(xiàn)數(shù)字遞增特效【仿支付寶我的財(cái)富】

    js實(shí)現(xiàn)數(shù)字遞增特效【仿支付寶我的財(cái)富】

    本篇文章主要介紹了js實(shí)現(xiàn)仿支付寶我的財(cái)富里的數(shù)字遞增特效,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • 前端開發(fā)過程中瀏覽器版本的兩種判定方法

    前端開發(fā)過程中瀏覽器版本的兩種判定方法

    前端開發(fā)過程中經(jīng)常需要判斷瀏覽器的版本,達(dá)到同時(shí)兼容多個(gè)瀏覽器的目的,下面有兩種不錯(cuò)的常用方法:jquery及HTML中的注釋,喜歡的朋友可以參考下
    2013-10-10
  • JavaScript輸入分鐘、秒倒計(jì)時(shí)技巧總結(jié)(附代碼)

    JavaScript輸入分鐘、秒倒計(jì)時(shí)技巧總結(jié)(附代碼)

    這篇文章主要介紹了JavaScript輸入分鐘、秒倒計(jì)時(shí)的代碼實(shí)現(xiàn),通過css和js代碼展示了邏輯過程,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • 微信小程序自定義組件封裝及父子間組件傳值的方法

    微信小程序自定義組件封裝及父子間組件傳值的方法

    這篇文章主要介紹了微信小程序自定義組件封裝及父子間組件傳值的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • 使用javascript做在線算法編程

    使用javascript做在線算法編程

    這篇文章主要介紹了使用javascript做在線算法編程的相關(guān)知識(shí),需要的朋友可以參考下
    2018-05-05
  • 深入理解JavaScript字節(jié)二進(jìn)制知識(shí)以及相關(guān)API

    深入理解JavaScript字節(jié)二進(jìn)制知識(shí)以及相關(guān)API

    當(dāng)前,前端對(duì)二進(jìn)制數(shù)據(jù)有許多的API可以使用,這豐富了前端對(duì)文件數(shù)據(jù)的處理能力,有了這些能力,就能夠?qū)D片等文件的數(shù)據(jù)進(jìn)行各種處理。本文將著重介紹一些前端二進(jìn)制數(shù)據(jù)處理相關(guān)的API知識(shí),希望對(duì)大家有所幫助
    2023-02-02
  • JavaScript中Array.from()的超全用法詳解

    JavaScript中Array.from()的超全用法詳解

    Array.from方法用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象(array-like?object)和可遍歷(iterable)的對(duì)象(包括?ES6?新增的數(shù)據(jù)結(jié)構(gòu)?Set?和?Map),別忘記就來(lái)講講他的具體用法吧
    2023-03-03

最新評(píng)論

饶平县| 拉孜县| 行唐县| 嘉定区| 南昌市| 宕昌县| 云浮市| 南通市| 曲靖市| 固始县| 岳普湖县| 罗城| 大足县| 准格尔旗| 白山市| 鲁山县| 左贡县| 饶阳县| 汝州市| 龙山县| 易门县| 朝阳市| 通山县| 巨野县| 册亨县| 威海市| 舞钢市| 泰州市| 民和| 广宗县| 澜沧| 台江县| 蓬溪县| 万载县| 教育| 文昌市| 方城县| 天祝| 华阴市| 丽水市| 岗巴县|