是否可以在 Jquery 移动 HTML5 页面中检测页面刷新?
我正在构建一个测验作为客户端项目的一部分 - 测验在一个 html 页面中通过 jquery 移动 div 页面导航。例如,如果用户在 index.html#quizpage3 上并刷新我想检测刷新和将导航返回到 index.html。
这可能吗?
干杯保罗
是否可以在 Jquery 移动 HTML5 页面中检测页面刷新?
我正在构建一个测验作为客户端项目的一部分 - 测验在一个 html 页面中通过 jquery 移动 div 页面导航。例如,如果用户在 index.html#quizpage3 上并刷新我想检测刷新和将导航返回到 index.html。
这可能吗?
干杯保罗
这是我正在使用的解决方案。在撰写本文时, 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;
}
我的答案与 Patch 的类似,但我所做的只是将以下内容添加到我本地引用的 js 文件顶部的 $(document).ready 行之前。您还可以将它添加到我相信的标题中的任何位置的 HTML 脚本标记中。
if (location.hash != "" && location.hash != "pageHome") {
var url = location.href;
url = url.replace(location.hash,"");
location.replace(url);
}
好吧,这是一个开始,每次您导航到另一个页面时,您都应该获得刷新控制台日志:
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>
也许另一个事件会更好:
我有点晚了,但我按照 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;
}
}
您可以在您的$(function() {});
方法中获取 URL(仅在页面加载时运行),如果它包含#则重定向到主页。
编辑:或window.onload = function ...
用作纯 JS 替代品。
我想,这更简单
$(document).on("pagebeforeshow", function() {
window.location = "page";
});