|
|
||
IRC: irc://irc.opera.com/japanese <--Opera 日本語ユーザのためのIRCチャンネル。
上のがつながらない場合は irc://irc.se.opera.com/japanese
いろいろ調べてみると,やはり XHR するときに "oldurl" と "date" の値が送られていないことが動かない原因のようだ。
"edit" リンクをクリックするとフォームが作られるがその時に input,type=hiddenとして "oldurl", "date" も作られている *1。
問題なのはこの時。
<input type="hidden" value="[URL]">;
or
<input type="hidden" value="[日時]">
となるべきなんだけど value 属性が付いてない。これでは 正しく XHR できないわけである。
さらに調べていくと,これらのフォームは http://del.icio.us/ui/static/lib.js?v=51E-6 内の ”create()" 及び "niceExtend()" によって作られていることがわかる。そのうち "niceExtend()" に問題があるようだ*2。
で,Opera でも動くようにするスクリプト。
deliciousFixAjaxEdit.js
if(location.href.indexOf('http://del.icio.us') == 0) {
window.opera.addEventListener(
'BeforeScript',
function (e) {
if(e.element.getAttribute('src').match(/ui\/static\/lib\.js/)) {
e.element.text = e.element.text.replace("if(src.css) { dest.className = src.css; delete src.css }", "if(src.css) { dest.className = src.css; delete src.css } if(src.type){dest.setAttribute('type', src.type);delete src.type}");
}
},
false
);
}
かなり強引ではある。
上のエントリの原因の根本らしいものを見つけた。
テストページ。
http://opera.higeorange.com/misc/opJSinputbug.html
input 要素を作ってそこに type と value 属性を付けているわけだが,
value -> type の順に付けるとvalue 属性が消えてしまう。 type -> value の順なら問題無し。
*1:developer cosole の DOM snapshot で確認できる
*2:Opera のほうが悪いのか, del.icio.us のスクリプトのほうが悪いのかは定かではない