エラーの原因はわかってるのに、どう書けばいいのかがわからないジレンマ
Yahoo!知恵袋には、その質問や回答をどれだけの人が評価して、どれだけの人が役に立ったかを表すポイントみたいなのがあります。
↑こんなのです。
で、この評価ポイントを、例えばこの質問の場合だと 「60 / 65」 みたいな感じで、その人の回答一覧画面
↑のページのどこかに表示させれば、回答してる人の場合、どの回答がどれだけ評価されてるのかが一目でわかっていいんじゃない!?と思い、グリモンを書いてみたんだけど、エラーが出てうまくいかない…orz
ソース
// ==UserScript== // @name chiebukuroUsefulPointGetter // @namespace http://d.hatena.ne.jp/so_blue/ // @include http://my.chiebukuro.yahoo.co.jp/my/myspace_ansdetail.php* // ==/UserScript== (function(){ var xpath = '/descendant::div[@class=\'category\']'; var r = document.evaluate(xpath, document.body, null, 7, null); var re = new RegExp('\\d+', 'ig'); for (var i = 0, len = r.snapshotLength; i < len; i++) { if (r.snapshotItem(i).parentNode.getElementsByTagName('IMG')[0].alt == '\u89e3\u6c7a\u6e08\u307f') { var sURL = r.snapshotItem(i).parentNode.getElementsByTagName('A')[0].href.split('\*-')[1]; GM_xmlhttpRequest({ method: 'GET', url: sURL, onload: function(res) { var x = document.createElement('DIV'); x.innerHTML = res.responseText; var t = x.getElementsByClassName('useful')[0].getElementsByTagName('P')[0].textContent; var s = t.split('\u4eba\u4e2d'); var s1 = s[0].match(re).join(''); var s2 = s[1].match(re).join(''); s = s2 + ' / ' + s1; var elmSPAN = document.createElement('SPAN'); elmSPAN.style.fontSize = 'small'; elmSPAN.textContent = s; //alert(s); r.snapshotItem(i).appendChild(elmSPAN); //★ } }); } } })();
- 解決済み(画像のalt属性で判断)の質問ページをGM_xmlhttpRequestで取得
- responseTextをDOMにパースして、お役立ちポイントを表す要素を取得
- 対象の質問行のどっかにその要素を突っ込む
っていう風にしようと思ってて*1、コメントアウトしてるalertの部分を活かすと思った様な文字列にはなってるので、2のお役立ちポイントを取得するとこまではうまくいってるんでしょうが、3のそれを突っ込む部分でエラーが出てる。★の行。
エラーコンソールには
r.snapshotItem(i) is null
とあるので、 r や i が参照出来てない、コールバックされる関数から見えてないってのもわかってるんです*2が、コールバックされる関数に r と i を渡す方法がわかりません。どう書けばいいのかがわかりません><
ググったりして色々試してみてはいるものの、関数(変数?)のスコープとかがまだよく理解出来てないので、結局うまくいかず。。。
んー、あともう少しなんだけどなぁ…
なんて、エントリあげてみて、誰か教えてくれないかと期待するオレ乙(;^ω^)