今のページをinstapaperにポストし、成功したらタブを閉じる

2011/1/30 どうにも文字化けがひどいので仕方なしにタイトルをこっちから送るように変更

あと失敗したら公式のbookmarkletを読むことで認証→戻るって手順ができるようにした


エクステ。

////////////////////////
// instapaper
ext.add("instapaper-add-this-page-and-close",function(){
    var url = window.content.location.href;
    var title = window.content.document.title;
    var tab = gBrowser.selectedTab;
    var username = "10sr";
    var password = "";
    var passwordManager = (Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager));
    var logins = passwordManager.findLogins({},
                                            "http://www.instapaper.com", "", null);
    for (var i = 0; i < logins.length; i++) {
        if (logins[i].username == username) {
            password = logins[i].password;
            break;
        }
    }
    display.echoStatusBar("Instapaper: adding " + url + "...");
    util.httpPost("http://www.instapaper.com/api/add",
                  {"username" : username,
                   "password" : password,
                   "url" : encodeURIComponent(url),
                   "title" : encodeURIComponent(title),},
                  function (xhr) {
                      display.echoStatusBar(xhr.status);
                      if (xhr.readyState == 4 && xhr.status == 201) {
                          // var title = decodeURIComponent(xhr.getResponseHeader("X-Instapaper-Title")); //超文字化けする
                          try {
                              Components.classes['@mozilla.org/alerts-service;1'].
                                  getService(Components.interfaces.nsIAlertsService).
                                  showAlertNotification(null, "Instapaper", "Page " + title + " added successfully", false, '', null);
                          } catch(e) {
                              // prevents runtime error on platforms that don't implement nsIAlertsService
                          }
                          display.echoStatusBar("Instapaper: adding " + url + "...done.");
                          gBrowser.removeTab(tab);
                      } else{
                          display.echoStatusBar("Instapaper: Something wrong has happended!");
                          if (window.loadURI) {
                              loadURI("javascript:function%20iprl5(){var%20d=document,z=d.createElement('scr'+'ipt'),b=d.body,l=d.location;try{if(!b)throw(0);d.title='(Saving...)%20'+d.title;z.setAttribute('src',l.protocol+'//www.instapaper.com/j/mt8YO6Cuosmf?u='+encodeURIComponent(l.href)+'&t='+(new%20Date().getTime()));b.appendChild(z);}catch(e){alert('Please%20wait%20until%20the%20page%20has%20loaded.');}}iprl5();void(0)");
                          }
                      }
                  });
},'instapaper add page and close tab when done without error.');