livedoorReaderの「全て読んだことにする」をキーボードで実行

livedoor Readerの「全て読んだことにする」をKeyConfigを使ったショートカットキーで実行できるようになった。以前から何度も挑戦していたもの。

コードは以下

var doc = window.getBrowser().contentDocument;
var elem = doc.getElementById('menu_button');
var event = doc.createEvent('MouseEvents');
//メニューオープン
event.initEvent('mousedown',true,true);
elem.dispatchEvent(event);

//メニュークリック
var elems = doc.evaluate(".//span/text()[self::text()='全て読んだことにする']", doc, null, 7, null);
event.initEvent('mouseup', true, true);
elems.snapshotItem(0).dispatchEvent(event);

//メニュー閉じる
var elem = doc.getElementById('keyhelp_button');
event.initEvent('click', true, true);
elem.dispatchEvent(event);
elem.dispatchEvent(event);

一度メニューをオープンしてからXPathを使う、ということが全然思いつかなかった。


上記のやり方に気づいたあとも、clickでは動作せず、mousedownやmouseupなどを使ったりと色々手間取った。


さらに、「全て既読に」を実行できるようになったあとも、メニューが閉じなくてかなり手間取ったけど、違う場所を2回クリックすることでようやく閉じるようになった。満足。