查了很多关于laya获取微信头像的方式, 但都是有限制或巨麻烦.
基本分两类: 服务器获取微信头像保存在本地服务器, 然后回传客户端.
用类似hack的方式获取头像, 然后层级有问题. 在就是跨域.
我尝试直接用laya的httpRequest请求, 没有跨域问题, 已测试代码:
// -------------------微信头像获取器-------------------
// 头像缓存
var headCache = {};
/**
* 微信头像获取器
* @param {头像Url} headUrl
* @param {显示头像Img} showImg
*/
function getWXHead(headUrl, showImg){
if(headCache[headUrl] != undefined){
showImg.skin = (headCache[headUrl]);
}else{
// 创建请求
let httpRequest = new Laya.HttpRequest();
httpRequest.once(Laya.Event.COMPLETE, this, (data)=>{
let byte = new Laya.Byte(data);
byte.writeArrayBuffer(data, 4);
let blob = new Laya.Browser.window.Blob([data], {type:'image/apng'});
let url = Laya.Browser.window.URL.createObjectURL(blob);
showImg.skin = (url);
// 缓存
headCache[headUrl] = url;
});
httpRequest.once(Laya.Event.ERROR, this, (data)=>{
// 输出错误
console.error(data);
});
// 发送请求
httpRequest.send(headUrl, '', 'get', 'arraybuffer');
}
}
// -------------------微信头像获取器-------------------
两个参数, 第一个是头像的url, 第二个是laya的image控件. 效果还不错, 服务器也能减轻带宽和储存压力.