opera:hige このページをアンテナに追加

 | 

2007-03-04

del.icio.us の その場で編集機能を Opera でも使えるようにする 05:04  del.icio.us の その場で編集機能を Opera でも使えるようにする - opera:hige を含むブックマーク はてなブックマーク -  del.icio.us の その場で編集機能を Opera でも使えるようにする - opera:hige

いろいろ調べてみると,やはり 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
    );  
}

かなり強引ではある。


javascript のバグ? 12:00  javascript のバグ? - opera:hige を含むブックマーク はてなブックマーク -  javascript のバグ? - opera:hige

上のエントリの原因の根本らしいものを見つけた。


テストページ。

http://opera.higeorange.com/misc/opJSinputbug.html


input 要素を作ってそこに type と value 属性を付けているわけだが,

value -> type の順に付けるとvalue 属性が消えてしまう。 type -> value の順なら問題無し。

*1:developer cosole の DOM snapshot で確認できる

*2Opera のほうが悪いのか, del.icio.us のスクリプトのほうが悪いのかは定かではない

トラックバック - http://orera.g.hatena.ne.jp/higeorange/20070304
 |