1

有没有人让 Disqus 与 PJAX 甚至常规的#!AJAX 一起正常工作。

让我们看一些这样做的人的例子:

  1. http://donejs.com/
  2. http://www.playmodules.net/demo/1

第一个是使用 Hash bang 风格,第二个是 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引发异常的事件。

4

1 回答 1

1

@JanHančič 是正确的,因为 iframe 是最好的路线(所以如果他回答我会标记他正确)。iframe 的高度和无缝可以通过以下方式处理:https ://github.com/house9/jquery-iframe-auto-height

我所做的是制作一个控制器(或任何你的框架调用它)来处理任何 url,例如:http://my.com/page/disqus它将加载http://my.com/page.

控制器只加载 DISQUS 小部件(包装在 a 中html/body)。然后在http://my.com/page模板中将 iframe 包含到http://my.com/page/disqus.

于 2012-12-08T15:36:20.773 回答