Firefox addon - Firefox addon 을 개발 하여 로 컬 파일 에 데 이 터 를 저장 하 는 방법

2438 단어
자신 은 Firefox 의 책 갈피 addon 을 사용 하 는 것 을 비교적 좋아 하지만, 기능 이 좀 만 족 스 럽 지 못 하 다 고 생각 하기 때문에 스스로 수정 하기 로 결정 했다.원본 코드 를 다운로드 하면 시작 합 니 다.로 컬 파일 에 데 이 터 를 어떻게 쓰 느 냐 가 핵심 적 인 문제 에 부 딪 혔 다.
 
제 기억 에 js 는 클 라 이언 트 의 스 크 립 트 (대부분 상황 에서) 로 서 이 권한 이 없 기 때문에 불가능 하 다 고 생각 합 니 다.그러나 나중에 모든 플러그 인 은 자신의 설정 정 보 를 가지 고 있 을 것 이 라 고 생각 했 습 니 다. 반드시 로 컬 시스템 에 써 야 합 니 다.그 밖 에 어떤 addon 은 책 갈피 기능 을 제공 하 는 경우 사용자 의 책 갈 피 를 로 컬 파일 에 저장 해 야 합 니 다.분명히 플러그 인 에서 할 수 있 습 니 다. js 를 통 해 이 루어 졌 는 지 는 확실 하지 않 지만 Firefox 브 라 우 저 에서 제공 하 는 xpcom API 를 통 해 이 루어 졌 거나 다른 component 를 통 해 이 루어 졌 을 수도 있 습 니 다.
 
 
모 질 라 에서 많은 자 료 를 찾 았 는데,
You access the file system using Mozilla XPCOM components.
로 컬 에 데 이 터 를 저장 하 는 것 이 가능 한 지 확인 하 였 습 니 다.
 
다음은 로 컬 파일 에 데 이 터 를 저장 하 는 예제 입 니 다.
 
 setFileContent: function(file, str) {  try {   var fos = Components.classes['@mozilla.org/network/file-output-stream;1']      .createInstance(Components.interfaces.nsIFileOutputStream);   fos.init(file, 0x02 | 0x08 | 0x20, 0664, 0);   var os = Components.classes['@mozilla.org/intl/converter-output-stream;1']      .createInstance(Components.interfaces.nsIConverterOutputStream);   os.init(fos, 'UTF-8', 4096, Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);   os.writeString(str);   os.close();   fos.close();  } catch(e) {   this.log(e);  } }
 
// file is nsIFile, data is a string
var otream = Components.classes["@mozilla.org/network/file-output-stream;1"].
             createInstance(Components.interfaces.nsIFileOutputStream);

// use 0x02 | 0x10 to open file for appending.
otream.init(file, 0x02 | 0x08 | 0x20, 0666, ostream.DEFER_OPEN); 
// write, create, truncate

var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
                createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
var istream = converter.convertToInputStream(data);
Components.utils.import("resource://gre/modules/NetUtil.jsm");
NetUtil.asyncCopy(istream, ostream);

 
참고:
https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO
http://stackoverflow.com/questions/2639400/where-firefox-extensions-store-data
https://developer.mozilla.org/en-US/search?q=Components.classes

좋은 웹페이지 즐겨찾기