zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    PHP面试题(二)
    机房的带外管理---远程管理你的开发测试机
    《Qt编程的艺术》——8.2.1 在Designer中使用View类
    一步一步学android之事件篇——单击事件
    OC类方法和实例方法 及常用的for/in方法
    终止imp/exp和expdp/impdp进程运行的方法
    java MessageFormat 应用 和 疑惑
    菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
    视频监控之VSCloud版本计划
    ural 1136. Parliament
  • 原文地址:https://www.cnblogs.com/andong2015/p/10071228.html
Copyright © 2011-2022 走看看