当前位置: 首页 > 博客 > 正文

如何解决多说最近访客头像显示问题

上午刚解决了Gravatar被墙的头像显示问题,然后又发现多说中也用到了Gravatar的头像,之前的解决办法不会影响到这里,因为多说的最近访客是js动态加载的,通过改php程序对他是不管用的,所以我又想了一些其他的办法来解决。

我先是用火狐的firebug来调试写了一个替换方法,具体代码如下

1
2
3
4
5
6
7
8
9
10
function my_replace_gravatar() {
  var nodes = document.getElementById('ds-recent-visitors').childNodes;
  var regS = new RegExp('http://\\d.gravatar.com', 'gi');
  for (var i = 0; i < nodes.length; i++) {
    var cnodes = nodes[i].childNodes;
    if (null != cnodes[0].src) {
      cnodes[0].src = cnodes[0].src.replace(regS, 'https://secure.gravatar.com');
    }
  }
}

然后运行了下,果然有效,那我就将段js代码放到主题文件里,再去访问我的网站,这时候问题来了,他找不到那个节点,虽然我把这段代码特意的放到了网页的底部,也就是在多说的js代码执行之后再执行,但是还是找不到节点,也就是在执行我这段代码的时候多说的代码还没有加载出来,所以他找不到那个节点。这时候得想办法让我的代码在执行的时候让多说的内容加载完在执行,也就得让我的代码延时执行,那么我就给他加个定时器就可以了,那么就有了以下完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function my_replace_gravatar() {
  var nodes = document.getElementById('ds-recent-visitors').childNodes;
  var regS = new RegExp('http://\\d.gravatar.com', 'gi');
  for (var i = 0; i < nodes.length; i++) {
    var cnodes = nodes[i].childNodes;
    if (null != cnodes[0].src) {
      cnodes[0].src = cnodes[0].src.replace(regS, 'https://secure.gravatar.com');
    }
  }
}
$(function(){
  var timer = setInterval( my_replace_gravatar() , 10000);
  clearInterval(timer);
});

这样问题就解决了,在打开网站后过会原来不显示的头像就又显示出来了

注:时间可以根据自己的服务器和多说服务器来定,自己来调整

本文固定链接: http://www.misul.cn/duoshuo_gravatar.html | 米苏的博客

该日志由 米苏 于2014年11月25日发表在 博客 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: 如何解决多说最近访客头像显示问题 | 米苏的博客
关键字: , , ,