主要问题
是否有一种javascript方式可以识别我们是否第一次访问某个网页,或者这是一个原因?
我的问题
我正在我的ajax驱动的网页中实现html5导航。
在主脚本上,我使用一些值初始化变量。
<script>
var awnsers=[];
process(awnsers);
<script>
进程(awnsers)将使用ajax根据给定的awnsers更新视图。
在调用ajax并替换视图的函数中,我存储了历史记录
history.pushState(state, "", "");
我也定义了popstate,我根据后面恢复了视图。此外,我修改了旧值的全局变量awnsers。
function popState(event) {
if (event.state) {
state = event.state;
awnsers=state.awnsers;
updateView(state.view);
}
}
导航(来回)除了当我转到外部页面,然后按下(再次转到我的页面)之外。 当我们访问页面时,首先调用主脚本,更新可用的awnsers,然后启动ajax。 Meanwile,调用pop状态事件,并更新视图。之后,主要的ajax结束,并根据空值更新视图。
所以我需要代码:
<script>
var awnsers=[];
process(awnsers);
<script>
仅在用户进入页面时调用,而不是在用户进入页面时调用。有什么办法吗?
谢谢!
可能的解决方案 在第一个芒果之后,我想到了一个可能的解决方案。经过测试和工作,无论谁,我都不知道是否有更清洁的解决方案。我添加了我已经完成的更改。
首先我添加:
$(function() {
justLoaded=true;
});
然后我修改了popState函数,因此负责初始化变量
function popState(event) {
if (event.state) {
state = event.state;
awnsers=state.awnsers;
updateView(state.view);
} else if(justLoaded){
awnsers=[];
process(awnsers);
}
justLoaded=false;
}
多数人。
答案 0 :(得分:1)
使用全局变量怎么样?
var hasLoaded = false;
// this function can be called by dom ready or window load
function onPageLoad() {
hasLoaded = true;
}
// this function is called when you user presses browser back button and they are still on your page
function onBack() {
if (hasLoaded) {
// came by back button and page was loaded
}
else {
// page wasn't loaded. this is first visit of the page
}
}
答案 1 :(得分:1)
使用cookie存储当前状态。
答案 2 :(得分:1)
是啊!这就是我所拥有的:
var popped = (($.browser.msie && parseInt($.browser.version, 10) < 9) ? 'state' in window.history : window.history.hasOwnProperty('state')), initialURL = location.href;
$(window).on('popstate', function (event) {
var initialPop = !popped && location.href === initialURL, state;
popped = true;
if (initialPop) { return; }
state = event.originalEvent.state;
if (state && state.reset) {
if (history.state === state) {
$.ajax({url: state.loc,
success: function (response) {
$(".fragment").fadeOut(100, function () {
$(".fragment").html($(".fragment", response).html()).fadeIn(100);
);
document.title = response.match(/<title>(.*)<\/title>/)[1];
}
});
} else { history.go(0); }
else {window.location = window.location.href; }
});
和
$.ajax({url:link,
success: function (response) {
var replace = args.replace.split(",");
$.each(replace, function (i) {
replace[i] += ($(replace[i]).find("#video-content").length > 0) ? " #video-content" : "";
var selector = ".fragment "+replace[i];
$(selector).fadeOut(100, function () {
$(selector).html($(selector,response).html()).fadeIn(100, function () {
if (base.children("span[data-video]")[0]) {
if ($.browser.msie && parseInt($.browser.version, 10) === 7) {
$("#theVideo").html("");
_.videoPlayer();
} else {
_.player.cueVideoById(base.children("span[data-video]").attr("data-video"));
}
}
});
});
});
document.title = response.match(/<title>(.*)<\/title>/)[1];
window.history.ready = true;
if (history && history.pushState) { history.pushState({reset:true, loc:link}, null, link); }
}
});