Mozilla Firefox 不再支持dialog.showModal

2024-04-26

我有一个巨大的 asp 网站项目及其弹出窗口,使用自showModalDialog。几个月前mozilla更新了,这个功能出现了一些问题。所以我用了ModalDialog 填充 https://github.com/niutech/showModalDialog来解决。但在上次 Mozilla 更新中,dialog.showModal()功能不支持,我的弹出窗口都没有打开。虽然他们给了这样的solution https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal通过 about:config 中的 dom.dialog_element.enabled 首选项启用,但它会打扰用户。

我对此进行了很多搜索,但没有找到任何解决方案来替换我的代码。由于我的项目规模庞大,因此很难使用模态引导程序之类的东西。我的弹出窗口和模式有一些要保存的返回值和此类交互。请为此介绍一个替代方案。或者帮助我如何为此编写新的东西。

thanks.


我通过对对话框填充函数进行一些更改解决了这个问题。最终代码是:

(function () {
window.spawn = window.spawn || function (gen) {
    function continuer(verb, arg) {
        var result;
        try {
            result = generator[verb](arg);
        } catch (err) {
            return Promise.reject(err);
        }
        if (result.done) {
            return result.value;
        } else {
            return Promise.resolve(result.value).then(onFulfilled, onRejected);
        }
    }
    var generator = gen();
    var onFulfilled = continuer.bind(continuer, 'next');
    var onRejected = continuer.bind(continuer, 'throw');
    return onFulfilled();
};
window.showModalDialog = window.showModalDialog || function (url, arg, opt) {
    url = url || '';
    arg = arg || null;
    opt = opt || 'dialogWidth:300px;dialogHeight:200px';
    var caller = showModalDialog.caller.toString();
    var dialog = document.body.appendChild(document.createElement('dialog'));
    dialog.setAttribute('style', opt.replace(/dialog/gi, ''));
    dialog.innerHTML = '<a href="#" id="dialog-close" style="position: absolute; top: 0; right: 4px; font-size: 20px; color: #000; text-decoration: none; outline: none;">&times;</a><iframe id="dialog-body" src="' + url + '" style="border: 0; width: 100%; height: 100%;"></iframe>';
    document.getElementById('dialog-body').contentWindow.dialogArguments = arg;
    document.getElementById('dialog-close').addEventListener('click', function (e) {
        e.preventDefault();
        //dialog.close();
        var event = document.createEvent('Event');
        event.initEvent('myEvent', true, true);
        dialog.dispatchEvent(event);
    });

    try {
        //dialog.showModal()
        dialog.style.top = '50px';
        dialog.style.display = 'block';
        document.getElementsByTagName('body')[0].appendChild(dialog);
    }
    catch (err) {
        alert(err);
    }

    //if using yield
    if (caller.indexOf('yield') >= 0) {
        return new Promise(function (resolve, reject) {
            dialog.addEventListener('myEvent', function () {
                var returnValue = document.getElementById('dialog-body').contentWindow.returnValue;
                document.body.removeChild(dialog);
                resolve(returnValue);
            });
        });
    }

        //if using eval
        var isNext = false;
        var nextStmts = caller.split('\n').filter(function (stmt) {
            if (isNext || stmt.indexOf('showModalDialog(') >= 0)
                return isNext = true;
            return false;
        });
        dialog.addEventListener('close', function () {
            var returnValue = document.getElementById('dialog-body').contentWindow.returnValue;
            document.body.removeChild(dialog);
            nextStmts[0] = nextStmts[0].replace(/(window\.)?showModalDialog\(.*\)/g, JSON.stringify(returnValue));
            eval('{\n' + nextStmts.join('\n'));
        });
    throw 'Execution stopped until showModalDialog is closed';
};
})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mozilla Firefox 不再支持dialog.showModal 的相关文章

随机推荐

  • 如何 UPSERT(更新或插入表?)

    UPSERT 操作更新或插入表中的行 具体取决于表是否已有与数据匹配的行 if table t has a row exists that has key X update t set mystuff where mykey X else
  • 如何在 Shiny 中获得一个按钮来并行调用 JavaScript 和 R 代码?

    我在 Shiny 中有一个 HTML 按钮 单击该按钮时会调用 JavaScript 函数geocodeAddressStreet in a js文件在 www目录 tags body tags input type button valu
  • 如何在 JQuery 中伪造 AJAX 开始/结束事件?

    我正在听 ajaxStart 和 ajaxStop 来显示 隐藏微调器 并且在编写服务器时我正在 JS 中执行一些模拟 AJAX 操作 它只是调用一个函数来使用 setTimeout 生成模拟数据 现在我只是在微调器上手动调用 hide 和
  • 当站点位于网络驱动器时,IE 无法正确渲染 CSS

    这是我们和我的朋友遇到的一个奇怪的问题 我们将网站定位在网络驱动器上 并尝试从那里打开它 所有其他浏览器都能很好地呈现此页面 但 IE 顺便说一句 为什么它总是 IE 无法理解 inline block 语句 但如果我将文件复制到本地驱动器
  • 是否可以通过括号来防止死亡?

    有时 我会编写一些带有比我喜欢的更多括号的代码 if new Day new Date millisecondsPerDay 75 instanceof oldDay Bonus points if that condition made
  • 为树视图创建 Qt 模型

    我正在用 Qt 使用 C 编写一个应用程序 我需要在树视图中表示一个对象结构 实现此目的的方法之一是为此创建一个模型 但在阅读有关该主题的 Qt 文档后我仍然很困惑 我的 结构 非常简单 有一个Project持有的物体Task中的对象std
  • 批量插入期间 SQL Server 表锁

    下面是示例查询 考虑 A INSERT INTO Target Col1 Col2 Col3 Col4 Statement 1 Select A Col1 B Col2 A Col3 C Col4 Statement 2 FROM A WI
  • 如何在 WordPress 中创建“路线”?

    为了我自己的理智 我正在尝试为 ajax api 创建一条路由 如下所示 api
  • Unix shell 之间的可移植性 - 我是否正确地考虑了这个问题?

    每当我编写 shell 脚本 主要是软件开发实用程序或构建工具 时 我通常都会尝试避免使用 bash 而倾向于使用普通的旧 sh 来实现可移植性 然而最近我遇到了越来越多的问题 其中有用的功能不可用 或者使用 sh 的系统之间的行为实际上不
  • 节点命令不起作用[重复]

    这个问题在这里已经有答案了 我正在使用 ubuntu 14 04 当我在终端上使用 node hello js 命令时 没有任何反应 我使用 sudo apt get 命令安装了软件包 我不知道出了什么问题 没有错误消息或任何东西 我搜索了
  • 在matplotlib中,如何绘制多色线,如彩虹

    我想用不同的颜色绘制平行线 例如 我想要两条厚度为 3 的平行线 一红一蓝 而不是一条粗细为 6 的红线 任何想法将不胜感激 Merci 即使使用智能偏移 见下文 连续点之间存在锐角的视图中仍然存在问题 Zoomed view of sma
  • Maven依赖冲突

    在我的项目中 有2个库 每个库都依赖于XML解析类java xml parsers DocumentBuilderFactory 这些库中的每一个都引用来自不同 jar 的文件 一个从名为 xmlParserAPIs 的 jar 获取它 而
  • C++ 中的跨平台原始数据类型

    与 Java 或 C 不同 C 中的原始数据类型的大小可能因平台而异 例如 int不保证是 32 位整数 各种编译器环境定义数据类型 例如uint32 or dword为此目的 但似乎没有固定大小数据类型的标准包含文件 实现最大可移植性的推
  • 如何避免在 Scala 中使用 asInstanceOf

    目前我的代码需要类转换 val dataWriter BytesDataWriter createDataWriter def createDataWriter p SomeClass p create datawriter asInsta
  • 带有对象的 Javafx 可编辑组合框

    我刚刚开始学习 Java Fx 我有一个装满物体的组合框 我处理了 toString 方法 我可以看到我想要在屏幕上显示的名称 但现在我想让它可编辑 用户将输入自己的文本 ComboBox 将创建一个新对象并将该文本放入正确的字段中 我知道
  • re.findall结果的顺序有保证吗?

    返回的匹配列表是否为re findall总是与源文本中的顺序相同 是的 正如中所述re module docs https docs python org 2 library re html module contents 以字符串列表的形
  • 可以在子例程中使用模块吗?

    最近 我开始使用 OO Perl 并且为我正在开发的新项目创建了很多新对象 因为我不熟悉有关 OO Perl 的任何最佳实践 所以我们很急于完成它 P 我将大量此类代码放入每个函数中 sub funcx use ObjectX i don
  • “在捆绑 NSBundle 中找不到名为“MainStoryboard”的故事板”

    我已经在一个应用程序上工作了很长时间 突然我得到了这个 在捆绑包中找不到名为 MainStoryboard 的故事板 NS捆绑 我已经在 StackOverflow 上红色了类似的问题 并且我尝试了所有方法 包括 重命名故事板文件 重新添加
  • 类型错误:无法读取 null 的属性“名称”

    我有一个用户对象 他们可以在其中编辑他们的信息 电话号码 电子邮件等 我无法访问输入name在 的里面setState回调并继续获取TypeError Cannot read property name of null 但是当我登录时eve
  • Mozilla Firefox 不再支持dialog.showModal

    我有一个巨大的 asp 网站项目及其弹出窗口 使用自showModalDialog 几个月前mozilla更新了 这个功能出现了一些问题 所以我用了ModalDialog 填充 https github com niutech showMo