XPCOM: URLからdataスキームを取得
const Cc = Components.classes;
const Ci = Components.interfaces;
var getDataFromURL = function(aURL){
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(aURL, null, null);
var channel = ioService.newChannelFromURI(uri);
var inputStream = channel.open();
var contentType = channel.contentType;
var bis = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream);
bis.setInputStream(inputStream);
var data = "", bufSize = 0;
while (bufSize = bis.available()) {
data += bis.readBytes(bufSize);
}
bis.close();
return data ? "data:" + contentType + ";base64," + window.btoa(data) : "";
};
主としてfaviconの保存用。
nsIBinaryInputStreamを使うのが良いみたい。
faviconのURLは
var win = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
var browser = win.document.getElementById("content");
var faviconURL = "";
if (browser.shouldLoadFavIcon(browser.selectedBrowser.currentURI)) {
faviconURL = win.gProxyFavIcon.getAttribute("src");
}
こんな感じで、今表示しているロケーションバーのアイコンから取得。
ようやく形になってきました。
他にはまったこと。
- mozStorageでのAUTOINCREMENTは
INTEGER NOT NULL PRIMARY KEYあるいはINTEGER PRIMARY KEY。AUTOINCREMENTを入れるとエラー。INTと省略してもエラー。
- 日時は
datetime('now', 'localtime')などとして文字列として保存。 - mozIStorageStatement#executeStepしたらmozIStorageStatement#resetを呼ばないとダメ。
