从浏览器的后退按钮访问页面时执行js功能

时间:2016-05-02 16:27:11

标签: javascript jquery jquery-mobile mobile-safari

我正在使用jquery mobile 1.2.0和jquery 1.7.2开发一个网站,我在尝试在加载页面时执行js函数时遇到了问题。

正常情况是用户使用链接(锚点)加载页面,因此我处理jquery移动事件" pageinit",这可以正常工作,但我需要执行相同的操作当用户使用浏览器的后退按钮访问页面时的代码/功能,在这种情况下," pageinit"事件永远不会被解雇。

javascript函数修改了UI,因此在调用函数之前需要加载UI。

我在Safari 9.1(iOS 9.3)上测试它。

我的网页与此非常相似:

<section id="someid" data-role="page" data-theme="a">
<!-- Page content -->
</section>

<script type="text/javascript">
function myFunction() {
//some code to modify de UI on page loaded
}

$("#someid").on("pageinit", function (e) {
    var page = $(this);

    myFunction();
});
</script>

更新1:

我已经测试了here列出的所有jquery手机事件而没有任何运气。

2 个答案:

答案 0 :(得分:0)

尝试pageshowload事件!

从文档中: 在遍历会话历史记录条目时会触发pageshow事件。 (这包括后退 /转发以及onload事件后的初始页面显示。)

另外,仅供参考,看起来pageinitdepracated in 1.4

$(document).on("pageshow", "#someid", function (e) {
    var page = $(this);

    myFunction();
});

答案 1 :(得分:0)

最后我发现这个SO question让我解决了这个问题,基本上就是使用窗口事件“popstate”,这里是我使用的确切代码:

<section id="someid" data-role="page" data-theme="a">
<!-- Page content -->
</section>

<script type="text/javascript">
function myFunction() {
//some code to modify de UI on page loaded
}

$("#someid").on("pageinit", function (e) {
    var page = $(this);

    myFunction();
});

var myCustomEvent = (navigator.userAgent.match('iPhone') != null) ? 'popstate' : 'pageshow';

$(window).on(myCustomEvent, function(e) {
    myFunction();
}
</script>

注1:大多数不同于Safari Mobile的浏览器都会对事件“pageshow”进行完美评估,因此会针对这些情况进行检查。

注意2:我在Safari Mobile 9.1(iOS 9.3)上测试了此代码。