2013-12-11 1 views
2

나중에 해당 웹 페이지를 복원 할 수 있도록 임의의 웹 페이지의 상태를 저장해야하는 firefox 확장 기능을 개발 중입니다. 버크는 모든 자바 스크립트 변수의 상태를 포함하여 페이지의 전체 상태를 복원해야한다는 단점이 있습니다. "저장"은 메모리에서 수행 할 수 있으며 직렬화 할 필요가 없습니다.XUL을 사용하여 Firefox에서 <browser> 요소를 어떻게 복제 할 수 있습니까?

따라서 browser 요소를 정확히 복제하는 방법이 있습니까? 그러면 원본이 현재 실행중인 지점과 동일한 지점에서 실행되기 시작합니까?

그렇지 않다면 firefox (C++ 사용)에 추가하려면 얼마나 많은 노력이 필요하며 어떤 파일과 설명서를보고 시작할 것입니까?

답변

1

아니, 정확히 당신이 원하는 것을 할 수있는 방법이없는 nsISessionStore. built-in session restore조차도 양식 필드 (및 일부 선택된 항목) 만 복원하지만 전체 JS 및 원시 객체 상태는 복원하지 않습니다.

이 같은 것을 구현 자신 가능하지 (그리고 대규모 작업도 될 것이다) :

  • 당신 수 uneval() 가장 JS 객체 있지만, 그 유형 정보를 잃어 버리게된다 당신은 소스를 얻을 수 있습니다 만 어떤 내부 상태도 아닙니다 (클로저를 통해 "숨겨진"상태로 생각하십시오). window 또는 document과 같은 기본 객체는 특별한 처리가 필요하며 내부 상태를 얻는 것이 C++ 수준의 "반영"없이는 항상 가능하지 않습니다.
  • 새로운 방식으로 디버거 API를 사용하여 실제 상태를 많이 얻을 수는 있지만 나중에 실제로 복원 할 방법이 없습니다. 그리고 "많이"는 여전히 "모두"와 동일하지 않습니다. 폐를 통해 "숨겨진"상태에 대한

: 내가 확실하게, 다음 예제 counter의 내부 상태를 얻기 위해 알고있는 방법은 없습니다 홀로 낮은 수준을받지 않고, 나중에 복원 플랫폼 종속적 인 전체 메모리 덤프.

var count = (function() { 
    var counter = 0; 
    return function() { return ++counter; }; 
})(); 
count(); 
count(); 
+0

죄송합니다. 더 구체적이어야합니다. js api를 사용할 수 없다면 C++을 만져보고 싶지만 어디서부터 시작해야할지 모르겠습니다. –

+1

'C++'FWIK에서는 실제 시리얼 라이저를 작성하고 메커니즘을 복원하지 않고 JS 엔진에 똑같이 해킹하지 않고 (* 추가 기능을 구현할 수 없으며 전체 브라우저를 포크로 실행하는 것을 의미합니다.) 실제로 * 쉽게 * 가능합니다. 하지만 뭔가 빠져있을 수도 있습니다. 그러면 [# jsapi] (https://wiki.mozilla.org/IRC)에서 JS 엔진 사용자에게 직접 묻는 것이 좋습니다. – nmaier

0

모든 개체의 속성을 탐색하고 어딘가에 저장할 수 있지만 상황을 보존 할 수 있다고 생각합니다. 바운드 기능은 어려울 것이다. 세션 저장소를 사용할 수 있습니까?

참조 : Session_store_API