在Safari, iOS上使用历史API后,警报,确认和提示不起作用
Alert, confirm, and prompt not working after using History API on Safari, iOS
在iOS上的Safari中调用history.pushState
后,当使用浏览器返回按钮更改时,不再可能使用alert()
, confirm()
或prompt()
。
这是一个iOS bug吗?有什么已知的变通办法吗?
复制此行为的简单示例:
<html>
<body>
<ul>
<li>Step 1: <button onclick="alert(Math.random())">Confirm Alert is working</button></li>
<li>Step 2: <button onclick="history.pushState(null, null, '/debug/'+Math.random());">Change History</button></li>
<li>Step 3: use your browser back button, to go back</li>
<li>Step 4: <button onclick="alert(Math.random())">Alert is not working anymore</button></li>
</ul>
</body>
</html>
您可以在这里在线试用:goo.gl/fafw60 .
这是因为Safari的前向缓存。
您可以使用下面的代码在按下后退按钮时强制重新加载。
window.onpageshow = function(e) { // e -> event
if (e.persisted) {
window.location.reload();
}
};
另外,如果你正在使用jQuery…
$(window).bind("pageshow", function(e) { // e -> event
if (e.originalEvent.persisted) {
window.location.reload();
}
});
一个解决方法是在按钮上添加onload属性,创建一个添加侦听器的函数,然后在window上调用它。Onpopstate和window.onload
相关文章:
- 是否可以用变量确认提示警报
- 火灾在卸载前确认警报仅适用于外部站点
- jQuery模态弹出的行为类似于确认和警报对话框
- 引导确认框警报不起作用
- 模式警报,但确认按钮未对脚本做出反应
- 发送前jQuery!确认警报两次
- 在chrome上显示类似于关闭窗口时的firefox的警报消息.确认消息”;离开"或“;留在这个页面上&quo
- 如何使用Impromptu作为确认警报
- 如果表单已填写,请在离开页面时确认警报
- 使javascript警报/确认对话框更加可见(特别是在Google Chrome浏览器中)
- 自定义警报/确认框
- JavaScript 警报/确认错误
- 从 javascript 函数调用时的空白警报确认框
- 仍然没有添加到 DOM 中,但如果插入了警报/确认,则会获取标签 ID
- 在JavaScript警报/确认框中发送PHP变量
- 来自Sweet警报确认对话框的响应
- 警报/确认按钮必须保持在同一页面上
- 如何在警报确认删除中获得id
- Laravel 5.2 -甜蜜警报确认框
- 如何制作类似警报的同步警报/确认对话框