2013-12-12 2 views
3

OSX의 WebKit 프레임 워크에 저장된 데이터가 유지되지 않는 broken localStorage 구현이 있습니다 (데이터는 응용 프로그램 재시작).JavascriptCore의 window.localStorage 값 변경 (C/Obj-C API에서 구성 할 수없는 속성 재정의)

그래서 대체 LocalStorage 개체를 구현했습니다.

그러나 localStorage은 쓰기가 불가능하고 구성 할 수 없으므로 window.localStorage = myLocalStorage을 할당 할 수 없습니다.

C/Obj-C API를 사용하여 JavascriptCore에서 이러한 속성을 재정의하는 방법을 찾을 수 없습니다. 그렇게 할 수있는 방법이 있습니까?

답변

1

직접 무시할 수는 없지만 StorageItem을 사용하여 무시할 수 있습니다. 그러나 저장 항목을 면하게하는 것은 오버

var _setItem = Storage.prototype.setItem; // first assign it to some variable 
Storage.prototype.setItem = function(key, value) { 
    if (this === window.localStorage) { 
    // play with localstorage here 
    } else { 
    // fallback 
    _setItem.apply(this, arguments); 
    } 
} 

두 번째 방법을 모두 세션 저장을 무시하고 로컬 스토리지 것입니다 것은 다른 사람에 대해 확실하지, CHROM, 오페라 __proto__ 속성을 무시하는 것입니다하지만 그것이 파이어 폭스에서 지원되는 표준 아닙니다

localStorage.__proto__ = Object.create(Storage.prototype); 

검사가 JSON을 저장하는 기본을 무시 wriiten 한 예는

https://gist.github.com/danott/942522

+0

NI 객체 그러나이 메소드는 localStorage [ "foo"] = "bar"와 같은 속성에 할당 할 때 작동하지 않습니다. – arnaud576875

+0

localStorage [ "foo"] = "bar" == window.localStorage) {,하지만 localStorage에도 값을 저장합니다. 나는 다른 방법으로는 생각할 수 없다. –

+0

그것을 확인하는 것이 좋으면 https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage를 확인한다. 문제는 로컬 저장소에 대한 적절한 API 문서가 없다는 것입니다. –