Disqus を PJAX や通常の#!
AJAXなどで適切に動作させた人はいますか?
これを行っている人々の例をいくつか見てみましょう。
1 つ目は Hash bang スタイルを使用し、2 つ目は PJAX を使用しています。これらのサイトをクリックすると、Disqus で gravatar アイコンが消え、javascript コンソールを開くと、通常、DISQUS
オブジェクトのバインド解除に問題があるため、エラーとログ メッセージが表示されます。
私は自分のランダムなハックを試しました(縮小によって難読化されていないDISQUS jsを見つけることができないため、これは困難です):
(function() {
if ( document.getElementById('my_disqus_script') && document.getElementById('disqus_thread') ) {
//var ds = document.getElementById('my_disqus_script');
//(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).removeChild(ds);
alert(window.location.href);
DISQUS.reset({
reload: true,
config: function() {
this.page.identifier = 'disqus_thread';
this.page.url = window.location.href + '#!disqus_thread';
}
});
}
else if (document.getElementById('disqus_thread')){
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.id = 'my_disqus_script';
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
}
else {
var ds = document.getElementById('my_disqus_script');
if (ds)
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).removeChild(ds);
if (window['DISQUS']) {
alert('cleanup');
DISQUS.reset();
DISQUS.cleanup();
DISQUS = null;
}
}
})();
基本的に、PJAX が新しいページをロードするときにクリーンアップする必要があるように、一連のクリーンアップ手法を試しましたが、常にnull
例外をスローするイベントがいくつか発生します。