2016-12-16 第二次更新:

这是我当天做的第二次更新,通过第一次更新(往下看),我成功的解决的之前存在的问题,不过又出现了新的问题,如果对浏览器进行前进和后退的按钮进行操作,你会发现,评论会一直加载。

这是由于我上次进行的操作导致的。也就是每次打开新的容器都会请求一次,而没有在乎是否已经加载过一次了。这样子的评论会一直堆积。

像下面这个图一样。

postbird

解决办法:

把下面更新的第1段请求的代码进行条件判断

多说中主要是下面两个div作为承载容器,而发生重复的是第二个,也就是 id="ds-reset"的容器重复了。

postbird

主要请求前判断这个重复的容器的内容是否是评论就行了,加载不出来的评论,是没有这个div的,但是却能通过$("#ds-reset")找到,我也不知道为啥

这个判断是随便的,我主要是通过html的长度来进行判断,默认没有评论的长度的是 >2900 ,因此我判断的长度必须是2000以上才认为多说正确加载了

需要说明的一点是,我进行加载之后,如果多说加载失败,ds-reset的长度是355,此时评论框是无法显示的,都是undefined

更新的代码

这个更新的代码主要是更新下面的第一点的代码,我还是采用的我的方式来解决。

if ($('.ds-thread').length > 0) {
    if($('#ds-reset').html().length>2000){
        //console.log($('#ds-reset').html().length);;
    }else{
        if (typeof DUOSHUO !== 'undefined') {
            DUOSHUO.EmbedThread('.ds-thread');
            DUOSHUO.ThreadCount($('.ds-thread-count')); 
        }else {
            $.getScript("//static.duoshuo.com/embed.js?ver="+Math.random()); 
        }
    }
}

目前没有发现别的问题。

<hr/>

更新分割线

<hr/> 2016-12-16更新: ---- 新的问题 ---- 之前根据下面提到的博主的文章解决多说插件的解决办法,但是发现,有时候不起作用,虽然不知道为什么。 比如连续点击 "留言" 就会发现第一次成功后面失败,同样是缓存了。 因此只能自己再想办法解决这个问题。 解决 ---- 依旧是根据百度统计的加载方式加载,在页面加载后进行脚本的输出。 引入一个脚本就能解决。 1、 将下面代码(还是之前的代码)写到一个单独的js中 只不过这次不加到pjax的complete里面
if ($('.ds-thread').length > 0) { 
    if (typeof DUOSHUO !== 'undefined') {
            DUOSHUO.EmbedThread('.ds-thread');
            DUOSHUO.ThreadCount($('.ds-thread-count')); 
    }else {
        $.getScript("//static.duoshuo.com/embed.js"); 
    }

2、通过下面的脚本(可以放到和百度统计一样的位置),每次在页面加载的时候进行上面的js文件的请求,而请求过来并输出到script的标签内的js脚本,就是我们上面写好的脚本代码.

相当于我们现加进去并执行的脚本。

这样子每次加载页面后,就可以请求一个新的脚本,并保证他不是缓存的(我是放在七牛上请求的,通过ver可以判断版本)。

var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = 'http://static.ptbird.cn/jquery.duoshuo.js?ver='+Math.random();
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();

3、这样子每次都会重新加载一下js代码,并且每次加载来的代码都会执行一遍。从而达到了多说的加载

需要注意的是,最好把这个js脚本单独写一个文件,因为里面的内容是需要加到网页上的,不然会加一大段没用的代码。

如果你有类似于代码高亮的(请看我的文章:pjax导致Prism代码高亮失效解决办法-链接:http://www.ptbird.cn/pjax-not-prism.html),则可以放在一起,减少请求次数。

<hr/>

更新分割线

<hr/> 文章原来的内容: -- 解决办法是由:https://qqdie.com/archives/pjax-duoshuo.html给出的,非常感谢。 特此记录一下。 问题 ---- 由于我新用的主题启用了pjax(访问效果以及用户体验都很好,速度也很快),但是发现用了多说评论插件(原来的评论我觉得有点慢)后,总是不能很好地将多说加载。 每次只有刷新后才能显示。 原因 ---- 因为我自己不熟悉pjax,后面才知道原来容器绑定的事件被新的容器给替换掉了,现在新的容器其实并没有绑定这个新事件,所以emed.js是无法加载的。 解决 ---- 根据博主的三种解决办法,我选择了最简单粗暴的方式。 1、找到主题的pjax的代码(我的主题把所有的代码都整合到一个文件去了,所以我找了好久,最后文件检索才看到) 2、找到代码中如下代码
$(document).on('pjax:complete', function() {
    XXXXXXXX;
});

3、在之前代码xxxx后面添加博主给出的解决代码即可!

if ($('.ds-thread').length > 0) { 
    if (typeof DUOSHUO !== 'undefined') {
            DUOSHUO.EmbedThread('.ds-thread');
            DUOSHUO.ThreadCount($('.ds-thread-count')); 
    }else {
        $.getScript("//static.duoshuo.com/embed.js"); 
    }
}

4、这样子每次pjax加载后在进行多说的加载。



目前使用没有任何问题,再次感谢博主。