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);
}

まとめ2

addEventListenerはMT車。onclickはAT車