Javascript &引用;警报();及;确认();不与“合作”;支持苹果移动网络应用程序”;
在iOS(目前为7.0)下,当我们的web应用被固定在主屏幕上时(即使用meta标签Javascript &引用;警报();及;确认();不与“合作”;支持苹果移动网络应用程序”;,javascript,ios,safari,ios7,Javascript,Ios,Safari,Ios7,在iOS(目前为7.0)下,当我们的web应用被固定在主屏幕上时(即使用meta标签apple mobile web app capable),看起来警报()和确认()不起作用 我在twitter上发现一个用户有类似的问题: 如果它真的是iOS 7中的一个bug,有人会临时修复它吗?我不知道它是设计的还是bug,但我可以确认这是一个真正的问题。另一件需要注意的事情是,如果用户启用了保存密码的选项,则任何需要登录的站点都将失败,因为该提示也被阻止。(你可以用一个简单的表单试试这个,表单上有用户名
apple mobile web app capable
),看起来警报()
和确认()
不起作用
我在twitter上发现一个用户有类似的问题:
如果它真的是iOS 7中的一个bug,有人会临时修复它吗?我不知道它是设计的还是bug,但我可以确认这是一个真正的问题。另一件需要注意的事情是,如果用户启用了保存密码的选项,则任何需要登录的站点都将失败,因为该提示也被阻止。(你可以用一个简单的表单试试这个,表单上有用户名和密码框,没有其他内容,它就不会提交了)。不过,这三个问题都有解决办法
$('form').attr('autocomplete', 'off');
我希望这能有所帮助。我们也遇到了类似的问题,警报破坏了我们的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。JavaScriptalert()
和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?');