【问题标题】:problem with onbeforeunload on IOS (Iphone)IOS(Iphone)上的onbeforeunload问题
【发布时间】:2019-02-27 16:07:50
【问题描述】:

我有一个包含此正文的页面:

<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();    
            });
        });

【问题讨论】:

  • 您是否尝试过更新的等效项addEventListener('beforeunload', unLoader)
  • 它是原生的等价物,jQuery 早于它。所以,是的,我会说这是一个“较新的等价物”。
  • 没人知道吗?有关信息,甚至微软在这里也有这个问题:marketplace.visualstudio.com iphone 上没有微调器,而桌面上有微调器...

标签: javascript jquery ios dom


【解决方案1】:

在 iOS Safari 上不会发生 beforeunload。没有将动作绑定到的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2020-11-11
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多