是否有人因为像PJAX或甚至常规#!
AJAX这样的东西而得到了正常的工作。
让我们看一下这样做的人的一些例子:
第一个使用Hash bang风格,第二个使用PJAX。现在点击这些网站,你会注意到你的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
的事件抛出异常。
答案 0 :(得分:1)
我所做的是制作一个控制器(或任何你的框架所称的控制器)来处理任何网址,例如:http://my.com/page/disqus
,它会为http://my.com/page
加载评论。
控制器只加载DISQUS小部件(包含在html/body
中)。然后在http://my.com/page
模板中,将iframe包含到http://my.com/page/disqus
。