javascript – 如何在HTML5历史状态中存储函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何在HTML5历史状态中存储函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1999字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 如何在HTML5历史状态中存储函数](/upload/InfoBanner/zyjiaocheng/808/73d367fbddf440d4889c4276037777b9.jpg)
因此,我使用HTML5历史记录管理来添加在具有AJAX加载的子内容的网站中前后导航的功能.
现在我想在状态对象中存储javascript函数,以便在弹出状态下进行回调.或多或少像以下代码:
$(window).bind("popstate", function(event) {
var state = event.originalEvent.state;
if (!state) {
return;
}
state.callback(state.argument);
}
function beforeLoad() {
var resourceId = "xyz";
var func;
if (case1) {
func = switchPageToMode1;
} else { // case 2
func = swithPageToMode2;
}
func(resourceId); // run the function
window.history.pushState({ callback: func, resourceId: resourceId }, "newTitle", "newURL"); // and push it to history
}
function switchPageToMode1(resourceId) {
alterPageLayoutSomeWay();
loadResource(resourceId);
}
function swithPageToMode2(resourceId) {
alterPageLayoutSomeOtherWay();
loadResource(resourceId);
}
function loadResource(resourceId) {
...
}
行.所以我要做的是存储对javascript函数的引用.但是当推送状态(实际的window.history.pushState调用)时,浏览器会提出投诉,即错误:“DATA_CLONE_ERR:DOM Exception 25”
谁知道我做错了什么?是否可以在州内存储函数调用?
解决方法:
不,这是不可能的,不是直接的. According to MDC“状态对象”,即pushState的第一个参数,“可以是任何可以序列化的东西”.不幸的是,你无法序列化一个函数. WHATWG spec基本上说的是相同的东西,但更多的话,其中的要点是在状态对象中明确禁止函数.
解决方案是存储您可以eval的字符串或状态对象中的函数名称,例如:
$(window).bind("popstate", function(event) {
var state = event.originalEvent.state;
if ( !state ) { return; }
window[ state.callback ]( state.argument ); // <-- look here
}
function beforeLoad() {
var resourceId = "xyz",
func
;
if ( case1 ) {
func = "switchPageToMode1"; // <-- string, not function
} else {
// case 2
func = "swithPageToMode2";
}
window[ func ]( resourceId ); // <-- same here
window.history.pushState(
{ callback : func,
argument : resourceId
},
"newTitle", "newURL"
);
}
当然,假设switchPageToMode1和-2在全局上下文(即窗口)中,这不是最佳实践.如果不是,则必须从全球范围以某种方式访问??它们,例如[window.] MyAppGlobal.switchPageToMode1,在这种情况下你可以调用MyAppGlobal [func](参数).
内容总结
以上是互联网集市为您收集整理的javascript – 如何在HTML5历史状态中存储函数全部内容,希望文章能够帮你解决javascript – 如何在HTML5历史状态中存储函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。