楽天ショップのメルマガ購読解除画面のチェックボックスを一括で解除するGreasemonkey

タイトル長いな。実際書いたのは4行だけだけど。

higeponさんの、
メルマガ整理 - Higepon’s blog - Mona OS and Mosh
を読んで、確かにそうだよなぁ、と思ったので楽天のメルマガを解除することにした。

昔はなかったような気がするけど、今はメルマガの一括解除画面があるんですね。便利。

と思って見てみたら60通以上のメルマガに登録されていて、ひとつひとつチェックボックスを外さないとイケナイみたいだったのですが、「もっとも忌むべきは単純作業」だということでGreasemonkeyを書いた。

いつものようにcho45さんの$Xを使ったので4行だけ。


Gmailを使うようになってから、あまりスパム的なメルマガも気にしなくなっていたのだけど、タイトルを見ないとイケナイ、という時間のロスはチリツモで馬鹿にならないのかもしれない。

もっとも、楽天のメルマガはいきなりアーカイブにしていたけど。





// ==UserScript==
// @name           uncheck_rakuten_melmaga
// @namespace      uncheck_rakuten_melmaga
// @include        https://emagazine.rakuten.co.jp/ns?act=chg_rmail*
// ==/UserScript==


var checkbox = $X('//input[@name="sid[]"]'); 
for(var i = 0;i<checkbox.length;i++){
	checkbox[i].checked=false;
}





//http://lowreal.net/logs/2006/03/16/1
//thanks cho45!
$X = function (exp, context) {
    if (!context) context = document;
    var resolver = function (prefix) {
        var o = document.createNSResolver(context)(prefix);
        return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
    }
    var exp = document.createExpression(exp, resolver);
    
    var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
    switch (result.resultType) {
        case XPathResult.STRING_TYPE : return result.stringValue;
        case XPathResult.NUMBER_TYPE : return result.numberValue;
        case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
        case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
            result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        }
    }
    return null;
}