コメントだけをAjaxにリロードする
チャットなどをやっている人は何度もページを更新しなければならないと思います。
ですが、コメントはそもそもAjaxで読み込んでいるんですから、コメント部分だけ呼び出せばほかの部分を更新しないので、効率的です。
このスクリプトでは、コメントの上に更新ボタンを表示。ボタンを押すとリロードします。
実際の読み込みは、unsafeWindow.Hatena.UgoMemo.AjaxComment.loadCommentにコメントページへのURLを送ってやれば読み込めます。はてな側のスクリプトに現在のURLからその作成する部分があったのでそれをコピー。
・・・Firefoxで動いてくれません。TenとHatenaオブジェクトが見つからない?
と思ったら、グローバルスコープへのアクセスはunsafeWindowを使わないといけないそうです。
このオブジェクトは、名前を見てもわかるように危険です。うごメモのように信用のあるサイトなら大丈夫ですが、すべてのページに適用するようなスクリプトに使うとGM_xmlhttpRequestをの参照を取られ、セッションジャックなどをされる危険があります。
必ず、@includeで信用されるサイトのみで利用するようにしましょう。
と、ココまではうまく言ったのですが、どうしてもGoogleChromeでアクセスできない・・・
windowオブジェクトではHatenaにアクセスできない。unsafeWindowも存在しない。Ajaxさら実装すればいいんだろうけど、めんどくさいのでパス・・・
もしGoogleChromeでもグローバルスコープにアクセスできる方法がありましたらコメントへお願いします。
function CommentReloder() { if(window.Hatena == undefined && this.unsafeWindow == undefined)return; var but = document.createElement("input"); but.type = "button"; but.value = "再読み込み"; but.addEventListener("click",function(){ var url = location.href; url = url.replace('/movie/','/movie.comment/'); document.getElementById('comment_load_area').innerHTML = ''; url = url.split('#')[0]; url = url.replace(/[?&]id=\d+/,''); //?id=を取る if (url.indexOf('?') == -1 && url.indexOf('&') > -1) url = url.replace(/&/, '?'); // 先頭が&なら?にする url = url + ((url.indexOf('?') > -1) ? '&' : '?') + new Date().getTime(); url = url.replace(/(\?|&)\d+=(&|$)/, '$1$2').replace(/&&/, '&').replace(/\?&/, '?'); (window.wrappedJSObject|| window).Hatena.UgoMemo.AjaxComment.loadComment(url); },false); $e("id('comment')/div[@class='box-title']").snapshotItem(0).appendChild(but); }