NicoCommunity New Res Checkerの不具合(多分解消済み)に関するメモ
教訓。AutoPagerizeクローンのことを忘れるべからず。
不具合が起きていたバージョン
var callback = function() {}; if (typeof window.AutoPagerize != 'undefined') { try { var ap = eval('ap', window.AutoPagerize.addFilter); callback = function() { ap.request(); }; } catch(e) { callback = function() {}; } }
- 実行時に出たエラーメッセージ: ap is null
修正版
完璧な対策ではないけど,ここまでやればまあ十分じゃないかな,と思う。
var callback = function() {}; if (typeof window.AutoPagerize != 'undefined') { try { var ap = eval('ap', window.AutoPagerize.addFilter); if(typeof ap == "object" && ap != null && typeof ap.request == 'function') callback = function() { ap.request(); }; } catch(e) { callback = function() {}; } }
window.AutoPagerizeがあるからといって,それはAutoPagerizeとは限らないよ,というお話。AutoPagerizeクローンの存在は知っているのに頭からすっぽり抜け落ちていた。
22:35 追記。
AutoPagerizeのソースを眺めていたらこんな記述を発見。
var ap = null
なにか根本的な勘違いをしていたかもしれない…。
ページのURLに対応するSITEINFOが見つかった時にapにオブジェクトが代入されるので,Autopagerizeが読み込み済みでもapはnullのまま,ということが十分にあり得る。
というわけでapが取得できる可能性ができるだけ高くなるように書き換えてきた。
var callback = function() {}; if (typeof window.AutoPagerize != 'undefined') { var ap = null; var callback = function() { if(ap != null) return ap.request(); try { var _ap = eval('ap', window.AutoPagerize.addFilter); if(typeof _ap == 'object' && _ap != null && typeof _ap.request == 'function') { ap = _ap; return ap.request(); } } catch(e) { ap = null; } }; }