5

是否可以在 Jquery 移动 HTML5 页面中检测页面刷新?

我正在构建一个测验作为客户端项目的一部分 - 测验在一个 html 页面中通过 jquery 移动 div 页面导航。例如,如果用户在 index.html#quizpage3 上并刷新我想检测刷新和将导航返回到 index.html。

这可能吗?

干杯保罗

4

6 回答 6

3

这是我正在使用的解决方案。在撰写本文时, tt 似乎工作正常,因此可能会对某人有所帮助。但是,这只是一个快速修复,为了获得更好的功能,最好在服务器端进行。

首先;请注意,此代码位于 JQM 代码之前。(来自 JQM 网站:因为 mobileinit 事件是立即触发的,所以您需要在加载 jQuery Mobile 之前绑定您的事件处理程序。”)。我们获得了当前页面的哈希值,但我们不想刷新某些页面主页之类的页面。

<script type="text/javascript">
        var needRedirect = false;
        $(document).bind("mobileinit", function(){
            var thisPage = location.hash;
            if (thisPage != '' && thisPage != '#homepage' && thisPage != '#page1') {
                needRedirect = true;
            }
        });
    </script>
    <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>

然后在您自己的代码开始时:

if (needRedirect) {
    $.mobile.changePage("#homepage");
    needRedirect = false;
}
于 2012-05-06T17:54:26.813 回答
1

我的答案与 Patch 的类似,但我所做的只是将以下内容添加到我本地引用的 js 文件顶部的 $(document).ready 行之前。您还可以将它添加到我相信的标题中的任何位置的 HTML 脚本标记中。

if (location.hash != "" && location.hash != "pageHome") {
    var url = location.href;
    url = url.replace(location.hash,"");
    location.replace(url);
}
于 2013-05-18T00:35:11.957 回答
1

好吧,这是一个开始,每次您导航到另一个页面时,您都应该获得刷新控制台日志:

JS

$("div:jqmData(role='page')").live('pagehide',function(){
    console.log('page refreshed, redirect to home');
    $.mobile.changePage( "#home", { transition: "slideup"} );
});​

HTML

<div data-role="page" id="home">
    <div data-role="content">
        Hello Refresh
        <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f">
            <li data-role="list-divider">Home</li>
            <li><a href="#page2">Page 2</a></li>
        </ul>
    </div>
</div>

<div data-role="page" id="page2" data-theme="a">
    <div data-role="content">
        Hello Page 2
        <ul data-role="listview" data-inset="true" data-theme="a" data-dividertheme="a">
            <li data-role="list-divider">Page 2</li>
            <li><a href="#home">Home</a></li>
        </ul>
    </div>
</div>​

也许另一个事件会更好:

于 2012-04-20T13:15:42.780 回答
0

我有点晚了,但我按照 Patch 的想法创建了一个非常简单的解决方案。在 $(document).ready() 之前将其放入脚本标记或 JS 文件中

checkPage();

function checkPage() {
    var _hash = location.hash;

    if (_hash != '' && _hash != "#home") {
        var _url = location.href.replace(_hash, "");
        window.location.href = _url;
    }
}
于 2014-01-30T09:00:19.083 回答
0

您可以在您的$(function() {});方法中获取 URL(仅在页面加载时运行),如果它包含#则重定向到主页。

编辑:或window.onload = function ...用作纯 JS 替代品。

于 2012-04-20T10:20:31.840 回答
0

我想,这更简单

$(document).on("pagebeforeshow", function() {
    window.location = "page";
});
于 2016-01-15T03:18:41.477 回答