javascript - IOS(Iphone)上的onbeforeunload问题
问题描述
我有一个包含此正文的页面:
<body>
<div class="loading">
<div class="loader"></div>
</div>
<div class="site-content">
[... all the content]
</div>
</body>
我正在使用此代码显示/隐藏微调器
function unLoader(e) {
$(".site-content").hide();
$(".loading").show();
}
$(window).on('load', function() {
$(".loading").hide();
$(".site-content").show();
window.onbeforeunload = unLoader;
});
问题是微调器可以在台式机 PC 和 mac 上工作,在 safari、firefox、chrome 等...
但它不适用于我的 Iphone。
另一方面,我在 ajax 中使用微调器进行调用:
var $loading = $('.loading').hide();
$(document)
.ajaxStart(function () {
$loading.show();
})
.ajaxStop(function () {
$loading.hide();
});
但是这次微调器在移动设备(iphone)中工作!
如何使微调器在我的所有页面中都适用于移动设备(使用首先显示的代码)?
我知道问题出在onbeforeunload
事件
提前致谢。
EDIT1:回答 josh 的评论,我什至试过这个:
var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i);
var eventNameHide = isOnIOS ? "pagehide" : "beforeunload";
var eventNameShow = isOnIOS ? "pageshow" : "load";
$(window).on(eventNameShow, function(){
$(".loading").hide();
$(".site-content").show();
window.addEventListener(eventNameHide, function(e) {
$(".site-content").hide();
$(".loading").show();
});
});
解决方案
在 iOS Safari 上不会发生 beforeunload。没有将动作绑定到的事件。
推荐阅读
- php - 在结帐页面 Opencart:2.3.0.2 中获取页面加载时的产品详细信息
- sql - 我想知道如何使用大量的 OR CLAUSE。谢谢
- ios - FBSDKLog:无法获取关键窗口
- c# - 如何根据 linq 列表中的属性选择对象及其属性?
- css - 如何在 Flexbox 的行之间创建一个垂直列
- symfony - Vuejs:仅在另一个组件发出事件时才注入和加载 vue 组件
- json - 如何为 OpenAPI 3.0.0 的 securitySchemes 使用“授权码”?
- highcharts - Highcharts - 是否可以仅针对系列的一个子集使用 stackLabels?
- python - Pandas 单元格值是另一个数据框中的列名
- python - 将连接状态写入 csv