blip.fmのfavorite DJsのページで確認してからdeleteするようにする
いま確認してみたけど、blip.fmのdelete機能自体がおかしい。普通にボタンを押してもなぜかdeleteされない。以下の文章は不正確かもしれない。こちらが先にfavorite登録して相手がこちらをlistener登録した場合deleteされてない?単純にデータベースの更新が遅いだけだ。たぶん間違ってた。
http://blip.fm/profile/cherenkov/favoritePeople
自分のアカウントのFavorite DJsのページでしか再現できないけど。DJの写真にマウスカーソルを合わせると右上にdeleteボタンが表示されるようになった。試しに押してみると確認も無しにDJが消えた。ひどいインターフェイスだ。以下のスクリプトで間違ってdeleteボタンを押した場合でも確認されるので安心できる。(「ダイアリー編集ページからリンクに飛ぶときに確認する」と同じ。)
// ==UserScript== // @name blip.fm script // @namespace http://d.hatena.ne.jp/Cherenkov/ // @include http://blip.fm/* // ==/UserScript== var xBtn = document.evaluate('//button[@class="x"]', document, null, 7, null); for(var i=0;i<xBtn.snapshotLength;i++){ xBtn.snapshotItem(i).setAttribute("onclick","return confirm('delete?');"); }
ちなみにaddEventListenerでやってみるとサイト側がjavascriptでボタンを制御している場合(たぶん)に半押しみたいな状態になる。はてなダイアリー編集のページではconfirmが表示されても結果的にリンク先に飛ぶのでaddEventListenerは使えなかった。今回のblip.fmの場合ではクリックされたことを示すローディング状態になるがdeleteされずに済んだ。
var xBtn = document.evaluate('//button[@class="x"]', document, null, 7, null); for(var i=0;i<xBtn.snapshotLength;i++){ xBtn.snapshotItem(i).addEventListener("click", function() { return confirm('delete?'); }, false); }
まとめ
addEventListenerとonclickはイベントが起こるタイミングが違う。(タイミングじゃなくて手順を細かく設定しないといけない)補足してくれるひと募集。
確認系はaddEventListenerよりもonclickのほうが確実。
あ、こういうときにmouseupも同時に設定するのか?ちょっとちがうか。
DOMレベル0とDOMレベル2の違いか。preventDefault()ぽいな。
addEventListenerでもできた!http://jmblog.jp/archives/169ここみた。
//はてなダイアリーの編集ページなどで実行 var xBtn = document.evaluate("//a[not(@target='_blank')]", document, null, 7, null); for(var i=0;i<xBtn.snapshotLength;i++){ xBtn.snapshotItem(i).addEventListener("click", function(e) { return (!confirm('ページ遷移する?')) ? e.preventDefault() : null; }, false); }