Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;警报();及;确认();不与“合作”;支持苹果移动网络应用程序”;_Javascript_Ios_Safari_Ios7 - Fatal编程技术网

Javascript &引用;警报();及;确认();不与“合作”;支持苹果移动网络应用程序”;

Javascript &引用;警报();及;确认();不与“合作”;支持苹果移动网络应用程序”;,javascript,ios,safari,ios7,Javascript,Ios,Safari,Ios7,在iOS(目前为7.0)下,当我们的web应用被固定在主屏幕上时(即使用meta标签apple mobile web app capable),看起来警报()和确认()不起作用 我在twitter上发现一个用户有类似的问题: 如果它真的是iOS 7中的一个bug,有人会临时修复它吗?我不知道它是设计的还是bug,但我可以确认这是一个真正的问题。另一件需要注意的事情是,如果用户启用了保存密码的选项,则任何需要登录的站点都将失败,因为该提示也被阻止。(你可以用一个简单的表单试试这个,表单上有用户名

在iOS(目前为7.0)下,当我们的web应用被固定在主屏幕上时(即使用meta标签
apple mobile web app capable
),看起来
警报()
确认()
不起作用

我在twitter上发现一个用户有类似的问题:


如果它真的是iOS 7中的一个bug,有人会临时修复它吗?

我不知道它是设计的还是bug,但我可以确认这是一个真正的问题。另一件需要注意的事情是,如果用户启用了保存密码的选项,则任何需要登录的站点都将失败,因为该提示也被阻止。(你可以用一个简单的表单试试这个,表单上有用户名和密码框,没有其他内容,它就不会提交了)。不过,这三个问题都有解决办法

  • 登录-在站点的表单标记中设置autocomplete=“off”,或者检测站点正在全屏模式下运行IOS7并应用此设置

    $('form').attr('autocomplete', 'off');
    
  • 警报和确认-您可以用JavaScript编写自定义函数,也可以用与此处大致相同的方式重写现有函数:。我喜欢使用Eric Martin的SimpleModel插件,它有一个内置的确认覆盖(Confirm override),即上面的底部演示


  • 我希望这能有所帮助。

    我们也遇到了类似的问题,警报破坏了我们的web应用程序。具体案例是一个警报,该警报由选择列表的一次更改触发。我们创建了一个非常简单的测试页面,如下所示:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <title></title>
            <meta name="description" content="">
            <meta name="viewport" content="width=device-width">
        </head>
        <body>
            <select onchange="alert('broken!');">
                <option value="one">One</option>
                <option value="two">Two</option>
            </select>
        </body>
    </html>
    
    
    一个
    两个
    
    在iPad上从Safari运行该页面并更改选择列表会触发警报,然后Safari冻结。实际上,你必须关闭Safari。这通常会影响Safari-您的web应用程序不必固定在主屏幕上。在这个测试页面上,您应该能够在运行iOS 7的iPad上测试这一点

    我们已经在iPad2(MC774B/A)和iPad3(MD367B/A)上进行了测试,Safari在这两个平台上都崩溃了


    解决这个问题的一种方法是使用setTimeout()延迟警报的执行。只有当Safari试图显示覆盖时,问题才会出现,同时显示选择列表项和警报。confirm()也以同样的方式被破坏。

    我认为一个bug与平滑隐藏选择框动画有关。 我不喜欢黑客,但这种方法很有效。 在100毫秒后确认调用(在选择窗口关闭之前,这足够了)


    我解决了一个设置超时

    <select onchange="setTimeout(function(){alert('not broken!');},200)">
                    <option value="one">One</option>
                    <option value="two">Two</option>
                </select>
    
    
    一个
    两个
    

    无论如何,这个bug似乎困扰着iPad,而不是iPhone。

    JavaScript
    alert()
    confirm()
    bug在iOS 7.0.3中已经修复。

    安达信是正确的:

    javascript alert()和confirm()错误已在iOS7.0.3中修复

    我自己刚安装并测试过


    当苹果正在解决这个问题时,我忙着寻找解决方法,最后找到了一个名为Alertify的js插件,我认为这个插件值得分享。我想我会从现在开始使用它,不管错误修复!它只是让警报、提示等看起来非常非常好。认为值得分享,因为这篇文章的读者可能使用标准的浏览器提醒。我无意中发现了它

    我用以下代码实现了这一点:

    const confirmation = window.confirm(message || 'Are you sure?');
    
    确认将显示在PC(边缘浏览器)上,但不会显示在iPhone(Safari浏览器)上

    我将代码更改为以下内容(删除了窗口。):

    突然,它又开始工作了


    我猜苹果有自己的确认实现,它不需要窗口。

    我使用Alertify解决了这个问题。简单有效。这真是一个很棒的示例块。你有没有向radar.apple.com报告过这个问题?我正在使用iOS 7.0.3的iPad和mini,这个问题仍然存在于Safari中。不过,它可以在Chrome上运行。我还可以确认,它不能在两种不同类型的iPad上运行,IOS 7.0.3我在IOS 7.0.4上运行,而且这个错误仍然在我身上发生。confirm()可以在IOS 7.0.4上运行,但在早期的IOS上不起作用(不确定我以前使用过哪种7.0.x)。也许这个错误只发生在iPad上。你能确认iphone 6受到了影响吗
    const confirmation = window.confirm(message || 'Are you sure?');
    
    const confirmation = confirm(message || 'Are you sure?');