2014-05-22 6 views
3

북마크에 작은 스크립트가있는 것이 좋습니다.북마크에서 로컬 저장소 사용

예를 들어, reddit의 this post에서 메모 편집 스크립트를 편집하여 localstorage를 통해 마지막 메모를 자동으로 저장하고로드합니다.

... 

window.addEventListener("load", function() { 
    div.innerHTML = localStorage.getItem("note"); 
}, false); 
document.body.addEventListener("keyup", debounce(function() { 
    localStorage.setItem("note", div.innerHTML); 
}, 760)); 
... 

내 html 문서를 하드 드라이브에 저장된 실제 html 문서로 열면 정상적으로 실행됩니다. 그러나 data: text/html, ...으로 내 코드의 (축소 된) 버전에 붙여 넣은 URL 막대를 사용하여 실행하면 NS_ERROR_NOT_AVAILABLE: 오류가 발생합니다. localstorage는 도메인에 바인딩되어 있기 때문에 이는 의미가 있습니다.

북마크로 localstorage를 작동시키는 방법이 있습니까?

The full note code is available here 참고로 하드 드라이브에 로컬로 저장하면이 코드 이됩니다. 그래서 이것을 북마크하고 원하는 경우 사용할 수 있습니다.

답변

4

질문에서 설명한대로 localstorage는 웹 원본에 속합니다. 브라우저에서 북마크 된 데이터 : URI의 출처는 "null"입니다. 즉, 브라우저는 데이터 : 페이지를로드 할 때마다 고유 한 출처에서 제공되는 것으로 간주합니다. 그러한 원점에 localStorage가있을 수 있더라도 원점으로 돌아가서 거기에있는 데이터에 액세스 할 수있는 방법이 없습니다.

북마크릿은 현재 페이지의 원본에서 스크립트를 실행합니다. 이것은 당신의 일과 같은 어떤 일들을 매우 어렵게 만든 문제입니다. 또 다른 예로, 책갈피 릿릿을 제공하는 암호 관리자는주의해야합니다. 현재 페이지의 보안 샌드 박스에서 코드를 실행하고 있습니다. 코드의 사소한 결함으로 인해 민감한 키가 현재 열려있는 페이지에 쉽게 노출됩니다.

북마크가 data : URI를 가리 키도록 결정되면 현재 답변은 no입니다.

부록 : 도메인을 가져 오는 것 이외의 다른 방법으로 원점을 가질 수 있습니다. Chrome의 확장 프로그램은 고유 한 출처를 가지고 있으며 로컬 컴퓨터에서 완전히 실행할 수 있습니다.

+0

이것은 정확합니다. 기원이 결정자이다. –

+0

그리고 사용자가 매번 확인하지 않고 북마크에 dropbox-j를 사용할 수 있는지 여부에 대한 질문에 방금 답했습니다. Dropbox-js는 localStorage도 사용합니다 ... – awendt

+0

나는 항상 북마크 렛이 현재 열려있는 페이지의 컨텍스트에서 실행되었다고 생각하고 있었으며 그 페이지의 로컬 저장소 값에 액세스 할 수있었습니다. 나는 그 가정에서 작동하는 것처럼 보이는 북마크릿을 만들었습니다. – Ruskin