2012-06-25 2 views
0

내가 지금처럼 내 웹 응용 프로그램에서 pushState를 사용하려고 해요 :historyjs/HTML5 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 

'이벤트입니다. 왜 이것들은 떨어 뜨리거나 돌려 보내지 않는가?

답변

3

많은 경우 pushState 구현에서 JSON을 사용하여 객체를 직렬화 및 비 직렬화합니다. 최신 브라우저 버전에는 the structured clone algorithm이라는 이름이 사용됩니다.

두 경우 모두 ErrorFunction 개체는 지원되지 않으므로 pushState 상태의 일부로 사용할 수 없습니다. 일반적으로 DATA_CLONE_ERR 예외가 발생하지만 오류 이벤트가 발생하지 않습니다. 당신이 정말로 기능을 저장하려면

, 나는 당신이 로컬 저장소에 Blob이 텍스트 방울의 수 저장과 더불어, <script> 노드로 기능을로드 할 수 있습니다 가능하도록 구조화 된 복제 알고리즘 Blob 복제를 지원하는 것을 알 수있다. 당신은 eval 그것을 사용해야합니다 (잘못 사용하면 위험 할 수 있습니다). 그러나 완전히 우아하지 않더라도 작동하는 것처럼 보일 수 있습니다. 데이터가 새로운 기능을 만들에

0

그냥이 존재하는 경우 JSON을 통해 함수 이름을 통과하지 이유에 의한 사고는 그것을

temp = new Function(State.data.pre_ajax_callback); 
temp(); 
을 간부 인