• google浏览器:Ignored call to 'confirm()'. The document is sandboxed, and the 'allow-modals' keyword is not set


      最近做一个功能,测试环境测试没问题,google浏览器测试也没问题,结果上生产发现google浏览器竟然用不了。查看控制台发现控制台报错:

    Ignored call to 'confirm()'. The document is sandboxed, and the 'allow-modals' keyword is not set.

      功能很简单,就是弹出一个确认对话框,但是生产环境google上竟然弹不出来,一直报上面问题。后来分析生产环境的页面是嵌入到一个iframe中的,iframe中有一属性“sandbox”,值如果包含“allow-modals”就没有问题了。

      比如:

    <iframe sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin" frameborder="0">

      不过这个iframe不是我们开发,也不是我们负责,解决方案:

      在页面加载是执行以下代码:
     

    $("iframe").each(function() {
            var sandbox=this.sandbox.value;
            if(sandbox.length>5){//此处也可以是>0,由于sandbox的属性值都是由allow打头的,所以这里我选择5
                if(this.sandbox.value.indexOf("allow-modals")==-1){
                    this.sandbox += ' allow-modals';
                }
            }
        })

    附:

    sandbox属性是指带有额外限制的 <iframe>。sandbox 是 HTML5 中的新属性。

    如果被规定为空字符串(sandbox=""),sandbox 属性将会启用一系列对行内框架中内容的额外限制。

    sandbox 属性的值既可以是一个空字符串(应用所有的限制),也可以是空格分隔的预定义值列表(将移除特定的限制)。

    sandbox主要是为了安全,它可以防止如下操作:

    • 访问父页面的DOM(从技术角度来说,这是因为相对于父页面iframe已经成为不同的源了)
    • 执行脚本
    • 通过脚本嵌入自己的表单或是操纵表单
    • 对cookie、本地存储或本地SQL数据库的读写

    常见的sandbox属性:

    描述
    "" 应用以下所有的限制。
    allow-same-origin 允许将内容作为普通来源对待。如果未使用该关键字,嵌入的内容将被视为一个独立的源
    allow-top-navigation 允许 iframe 内容从包含文档导航(加载)内容。
    allow-forms 允许嵌入的浏览上下文可以提交表单。如果该关键字未使用,该操作将不可用
    allow-scripts 允许嵌入的浏览上下文运行脚本(但不能window创建弹窗)。如果该关键字未使用,这项操作不可用
    allow-modals 允许内嵌浏览环境打开模态窗口(比如alert(),confirm())
    allow-orientation-lock 允许内嵌浏览环境禁用屏幕朝向锁定(译者注:比如智能手机、平板电脑的水平朝向或垂直朝向)
    allow-pointer-lock 允许内嵌浏览环境使用 Pointer Lock API
    allow-popups 允许弹窗 (类似window.open, target="_blank", showModalDialog)。如果没有设置该属性,相应的功能将静默失效
    allow-popups-to-escape-sandbox 允许沙箱文档打开新窗口,并且不强制要求新窗口设置沙箱标记。例如,这将允许一个第三方的沙箱环境运行广告开启一个登陆页面,新页面不强制受到沙箱相关限制
    allow-presentation 允许嵌入者控制是否iframe启用一个展示会话
    allow-top-navigation 嵌入的页面的上下文可以导航(加载)内容到顶级的浏览上下文环境(browsing context)。如果未使用该关键字,这个操作将不可用。

    参考:

    https://stackoverflow.com/questions/32119446/ignored-call-to-alert-the-document-is-sandboxed-and-the-allow-modals-key/33262772

    https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe

  • 相关阅读:
    cocos2dx图片加密解密(npk方式)
    C#吾日三省吾身
    重写窗体的Enter事件(可对窗口的Enter事件做自己想做的事情)
    c#中显示Excel控件使用说明
    c# datagridview合并单元格
    AxSpreadsheet属性与方法说明
    c#实现货币转中文大写类
    jquery常用的插件1000收集
    [原创]站长自助平台一个帮助站长全自动实现一键采集、发贴(伪原创)、会员注册、交换连接的平台
    c#操作XML常用方法
  • 原文地址:https://www.cnblogs.com/andong2015/p/10071228.html
Copyright © 2020-2023  润新知