Firefox Add-on Builder で Cookie を扱うには

見ているページの URL を WordPress.com に簡単に投稿するには、WordPress.com Extension :: Add-ons for Firefox が使えるのだけれど、もっとシンプルなものが欲しかったので、Add-on Builder を使って作ってみた (wp it :: Add-ons for Firefox)。

WordPress.com の記事投稿画面を表示するには、

http://<ユーザー名>.wordpress.com/wp-admin/post-new.php?post_type=post&post_title=<記事のタイトル>&content=<記事の内容>

をブラウザーで表示すればよい。
ユーザー名は http://wordpress.com から受信したクッキーから取得できる。そこで、Add-on Builder の中からクッキーを参照する方法を調べてみた。

firefox – read cookies with addon – Stack Overflow によれば、

var {Cc, Ci} = require("chrome");
var cookieSvc = Cc["@mozilla.org/cookieService;1"].getService(Ci.nsICookieService);

とすれば、cookieService を利用できるようになる。

Cookies – MDN によれば、

var ios = Components.classes["@mozilla.org/network/io-service;1"]  
            .getService(Components.interfaces.nsIIOService);  
var uri = ios.newURI("http://www.google.com/", null, null);  
var cookieSvc = Components.classes["@mozilla.org/cookieService;1"]  
                  .getService(Components.interfaces.nsICookieService);  
var cookie = cookieSvc.getCookieString(uri, null); 

とすることで、指定したホストから受信したクッキー文字列を参照できる。

指定した url から受信した、名前が name のクッキーの値を取得する関数 getCookie は以下のようになる。Add-on Builder 上で確認するにはこちらをどうぞ。

const {Cc, Ci} = require("chrome");
const ios = Cc["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);  
const cookieSvc = Cc["@mozilla.org/cookieService;1"].getService(Ci.nsICookieService);

function getCookie(url, name) {
    var cookie_uri = ios.newURI(url, null, null);
    var cookie_string = cookieSvc.getCookieString(cookie_uri, null);
    var cookies = cookie_string.split('; ');
    var key = name + '=',
        i;
    for (i = 0; i < cookies.length; i++) {
        if (cookies[i].lastIndexOf(key, 0) == 0) {
            return cookies[i].replace(key, '');
        }
    }
    return null;
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中