menu search

Disqus AJAX加载

Jun 13, 2015

写这个主题(和移植之前的)的时候遇到的坑。主题采用了PJAX,由于Ghost没有第三方评论所以只能用Disqus。

AJAX加载一个页面后需要处理的东西包括脚本重载,一般来说就是把原来的脚本放到success(data){}里面就好了。不过Disqus不一样,如果重载它的脚本会导致在IE&Safari下无限转圈加载,虽然Chrome和FF貌似可以正常加载,但是Head会被一堆Disqus的embed.js刷屏。

后来挖掘文档的时候才发现官方提供了DISQUS.reset();这个接口,只需要在AJAX后执行即可成功加载。不会出现上面提到的多次加载脚本。

How?

  • 删除原本的Disqus加载脚本
  • 把下面的脚本添加到你的站点。
            function loadDisqus(){
                if (typeof DISQUS === 'object') {
                    DISQUS.reset({
                        reload: true,
                        config: function() {
                            this.page.identifier = "newidentifier";
                            this.page.url = "http://example.com/#!newthread"
                        }
                    })
                }
                else{
                    var disqus_shortname = 'YOUR_SITE_SHORTNAME';

                    var s = document.createElement('script'); s.async = true;
                    s.type = 'text/javascript';
                    s.src = '//' + disqus_shortname + '.disqus.com/embed.js';
                    (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
                }
            };
  • 通过loadDisqus();来加载评论

this.page.identifier是你当前页面的ID(推荐),this.page.url是绝对地址。

参考文档:Using Disqus on AJAX sites


用第三方评论坑真多…

Comments

edit x send markdown image
paragraph comment heart