Jquery historyjs/HTML5 pushState“;“数据”;参数不保存作为函数的对象的属性
我正在尝试在web应用程序中使用pushState,如下所示:Jquery historyjs/HTML5 pushState“;“数据”;参数不保存作为函数的对象的属性,jquery,pushstate,history.js,Jquery,Pushstate,History.js,我正在尝试在web应用程序中使用pushState,如下所示: //default settings var ds = { path: window.module.Globals.prototype.base_url, //location misc variable for my app type: 'POST', dataType: 'html', data: {}, target: 'main_swap
//default settings
var ds = {
path: window.module.Globals.prototype.base_url, //location misc variable for my app
type: 'POST',
dataType: 'html',
data: {},
target: 'main_swap_area',
pre_ajax_callback: function(scope){ console.log('pac'); },
post_success_callback: function(data, textStatus, jqXHR, scope){ console.log('psc'); },
scope: this
};
History.pushState(ds, 'Title 1', ds.path);
我有一个回调函数监听“statechange
”事件
jQuery(window).bind('statechange',function(){
var
State = History.getState(),
url = State.url;
console.log(State); // State.data is object with all original properties EXCEPT properties that contained functions as values
}); // end onStateChange
我的控制台的输出是一个对象,它包含我的所有原始属性/值,除了所有具有值函数的属性。为什么要删除/不返回这些对象?在某一点上,许多
pushState
实现使用JSON来序列化和反序列化对象。较新的浏览器版本使用一种称为
在这两种情况下,都不支持Error
和Function
对象,因此不能将它们用作pushState
状态的一部分。尝试这样做通常会导致数据克隆错误异常,但错误事件可能不会冒泡
如果您真的想存储函数,我发现结构化克隆算法支持
Blob
克隆,因此您可以将函数加载为
节点,并可能将此文本Blob存储为本地存储中的Blob
。您必须eval
它才能使用它(如果使用不正确,可能会很危险),但我可以看到这样的工作方式即使不完全优雅。在某一点上,许多pushState
实现使用JSON来序列化和反序列化对象。较新的浏览器版本使用一种称为
在这两种情况下,都不支持Error
和Function
对象,因此不能将它们用作pushState
状态的一部分。尝试这样做通常会导致数据克隆错误异常,但错误事件可能不会冒泡
如果您真的想存储函数,我发现结构化克隆算法支持
Blob
克隆,因此您可以将函数加载为
节点,并可能将此文本Blob存储为本地存储中的Blob
。您必须eval
it才能使用它(如果使用不当,可能会很危险),但我可以看到这样的操作即使不完全优雅。只是一个想法,为什么不通过json传递函数名,如果它存在于数据中,创建一个新函数,然后执行它
temp = new Function(State.data.pre_ajax_callback);
temp();
只是一个想法,为什么不通过json传递函数名呢?如果数据中存在函数名,那么创建一个新函数,然后执行它
temp = new Function(State.data.pre_ajax_callback);
temp();