zoukankan      html  css  js  c++  java
  • 针对Chrome谷歌等浏览器不再支持showModalDialog的解决方案

      最近在维护一个老项目,之前都是用IE来调试代码的。今天想着测试一下项目的兼容性,就用了谷歌浏览器,然后就遇到这样一个问题:一段用showModalDialog实现弹出模态框和返回值的js代码,在调试时报出了下面这个错误:

    Uncaught TypeError: window.showModalDialog is not a function

      一开始怎么都想不通,明明以前都是可以正常打开的,为什么现在就不行了呢……然后一查才知道,原来是Chrome 把对showModalDialog的支持去掉了(太坑了。^!^……)。

    浏览器异常:

    如果出现这个异常,很不幸你已经躺枪了。关于这个问题可以看这里:

    http://windowsitpro.com/blog/google-kills-showmodaldialog-api-chrome-37-and-does-evil-exchange-owa

    http://www.infoq.com/news/2014/09/chrome-showmodaldialog

    其中有些临时解决办法,但貌似showModalDialog不会回来了。

    问题解决

    常见的弹出窗口有div模拟或者用window.open代替,对于一个已经在用的系统来说,采用div方式转换成本较高,采用window.open改动会更少一些,但也会丢失其模态性。

    这里采用简单的window.open方案,毕竟替换成本低很多。针对上文中提到的showModalDialog使用方式,替换为:

    采用这种方式就可以打开一个和之前使用showModalDialog差不多的窗口。但是怎么返回值呢?

    在弹出页面中有两种方式:

    1、直接设置父窗口的DOM对象的值。

    父窗口中应该有一个id为parentWindowControllId的DOM元素。

    2、调用父窗口中的Javascript函数,由父窗口进行相应的处理。

    父窗口提供一个DoAfterXXX的函数就可以了。

    长远来看window.open由于其用户体验问题必将走向没落,大家还是尽快转移为好。

  • 相关阅读:
    Goahead 3.1.0 发布,嵌入式 Web 服务器
    jdao 1.0.2 发布,轻量级的orm工具包
    pythonbitstring 3.1.0 发布
    JavaScript 搜索引擎 lunr.js
    Difeye 1.1.4 版本发布
    Chronon 3.5 发布,支持 Java 7
    性能扩展的那些事儿:一味增加硬件并不能解决响应时间问题
    Eclipse SDK 4.2.2/Equinox 3.8.2 发布
    Linux Kernel 3.8.1 发布
    Armadillo C++ Library 3.800 发布
  • 原文地址:https://www.cnblogs.com/j-star/p/5961812.html
Copyright © 2011-2022 走看看