Jquery historyjs/HTML5 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

我正在尝试在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_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();