我只是试图在博客上创建一个简单的评论表单。当用户在电子邮件框中写入时,我想要使用jQuery加载用户的Gravatar。
我该怎么做?
Gravatar的URL看起来像这样:
http://www.gravatar.com/avatar/<md5hashofemail>
所以你需要做的就是包含一个名为md5的函数,该函数返回用户电子邮件的md5哈希值。有许多在线工具可以实现此功能,但我认为https://github.com/blueimp/JavaScript-MD5/blob/master/README.md很好用。之后,只需执行以下操作:
// get the email
var email = $('#email').val();
// -- maybe validate the email?
// create a new image with the src pointing to the user's gravatar
var gravatar = $('<img>').attr({src: 'http://www.gravatar.com/avatar/' + md5(email)});
// append this new image to some div, or whatever
$('#my_whatever').append(gravatar);
// OR, simply modify the source of an image already on the page
$('#image').attr('src', 'http://www.gravatar.com/avatar/' + md5(email));
我觉得这是显而易见的,但为了后人着想,我会补充一下:
如果用户的电子邮件是私有的,并且您正在像stackoverflow一样在列表中显示它们,那么最好在服务器上对电子邮件进行编码,以便在查看源代码时不会公开显示用户电子邮件。
请查看我提供的功能示例代码
get_gravatar_image_url (email, size, default_image, allowed_rating, force_default)
只需要提供电子邮件地址是必填项 - 其他内容使用默认值。
一定要包括来自Joseph Myers的事实标准MD5生成器JS文件。
<script src="http://www.myersdaily.org/joseph/javascript/md5.js"></script>
麻烦的部分是使用MD5哈希实现生成URL,这与jQuery分开。我发现blueimp-md5库在GitHub上的各种MD5包中拥有最多的星标,并且它几乎是自包含的(大约6kb压缩)。如果您正在使用Node和/或Browserify,则此解决方案可能非常适合您:
var md5 = require("blueimp-md5");
function gravatar(email){
var base = "http://www.gravatar.com/avatar/";
var hash = md5(email.trim().toLowerCase());
return base + hash;
}
然后,您可以使用jQuery设置图像的src
属性,如下所示:
var email = "someone@example.com";
$("#image").attr("src", gravatar(email));
哇,感谢您的这篇文章。但是如果您有自己的空白图像,并且想要使用它来替代Gravatar。
<script src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.12.0"><script>
<img id="image" src="images/mydefault.png" />
<script>
var src = 'http://www.gravatar.com/avatar/' +
md5('yourmail@gmail.com') + '?default=' + encodeURIComponent(GetRootDomain() + '/Content/images/nopic-small.png');
$('#image').attr('src', src);
</script>