Firefox Addon SDK 1.12で
UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 10: ordinal
not in range(128)
というエラーが出た。
このエラーが出るのはpackage.json 内か、ファイル名に ASCII以外の文字が使われている場合に出る
2012年10月19日金曜日
Firefox拡張機能で日本語含むUTF-8文字列&JSONを保存する
setCharPref()はASCIIのみで日本語を含む文字列やJSONは保存できない
私はASCIIとUTF-8で分けるのは面倒なので全部UTF-8で保存している
setPref("json", JSON.stringify({ json: "あああ" }));
var Cc = Components.classes, Ci = Components.interfaces;
var gBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.[your_extensions_name].");
保存:
取得:
私はASCIIとUTF-8で分けるのは面倒なので全部UTF-8で保存している
setPref("json", JSON.stringify({ json: "あああ" }));
var Cc = Components.classes, Ci = Components.interfaces;
var gBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.[your_extensions_name].");
保存:
function setPref(prefName, value) {
if (typeof value === 'boolean') {
gBranch.setBoolPref(prefName, value);
} else if (typeof value === 'number') {
gBranch.setIntPref(prefName, value); // -2,147,483,648~2,147,483,647
} else if (typeof value === 'string') {
var ustr = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString);
ustr.data = value;
gBranch.setComplexValue(prefName, Ci.nsISupportsString, ustr);
// gBranch.setCharPref(prefName, value); // ASCII only 日本語はムリ
}
}
取得:
function getPref(prefName, defValue) {
var type = gBranch.getPrefType(prefName);
const nsIPrefBranch = Ci.nsIPrefBranch;
switch (type) {
case nsIPrefBranch.PREF_STRING:
default:
return gBranch.getComplexValue(prefName, Ci.nsISupportsString).data;
// return gBranch.getCharPref(prefName); // ASCII only
case nsIPrefBranch.PREF_INT:
return gBranch.getIntPref(prefName);
case nsIPrefBranch.PREF_BOOL:
return target.getBoolPref(prefName);
}
return defValue;
}
2012年10月13日土曜日
XULでテキストリンクを表示する
ボタンではなくリンクスタイルで表示する方法
https://developer.mozilla.org/ja/docs/XUL/Style/text-link使い方: <label class="text-link" value="Google" href="http://www.google.co.jp" />
2012年10月5日金曜日
2012年3月30日金曜日
アドオンからWebページのHTMLを書き換える
最初、innerHTML で書き換えてたのですがAMOの事前審査でセキリュティリスクがあると言われて拒否されました。。
https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion
そこで一旦HTMLからDOMを作り、それをWebページに追加する形にしたところ無事通過しました。
function HTMLParser(doc, aHTMLString)
{
var html = doc.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", null);
var body = doc.createElementNS("http://www.w3.org/1999/xhtml", "body");
html.documentElement.appendChild(body);
body.appendChild(Components.classes["@mozilla.org/feed-unescapehtml;1"].getService(Components.interfaces.nsIScriptableUnescapeHTML).parseFragment(aHTMLString, false, null, body));
return body;
}
https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion
そこで一旦HTMLからDOMを作り、それをWebページに追加する形にしたところ無事通過しました。
function HTMLParser(doc, aHTMLString)
{
var html = doc.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", null);
var body = doc.createElementNS("http://www.w3.org/1999/xhtml", "body");
html.documentElement.appendChild(body);
body.appendChild(Components.classes["@mozilla.org/feed-unescapehtml;1"].getService(Components.interfaces.nsIScriptableUnescapeHTML).parseFragment(aHTMLString, false, null, body));
return body;
}
登録:
投稿 (Atom)