ラベル Firefoxアドオン の投稿を表示しています。 すべての投稿を表示
ラベル Firefoxアドオン の投稿を表示しています。 すべての投稿を表示

2013年1月10日木曜日

 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].");

保存:
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年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;
}