背景
目前正在开发一个必须适用于Mac OS和Windows的网页。目前。我已经在IE上测试了这段代码并且效果很好,但是当涉及到Mac OS时,它似乎现在可以像Windows一样正确执行。
问题
我隔离了导致Mac OS问题的问题。这调用了Sharepoint Doc lib,后者又返回一个字节数组,后来我创建了一个Base64字符串,这导致了这个问题。我已经阅读了下面关于XMLHttpRequest与Safari的兼容性的文档,并表明它是兼容的。不知道为什么它在IE中工作得那么好但在Safari中不起作用。
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
代码
function GetImgB64(relativeUrl) {
var defferedVarVlalue = jQuery.Deferred();
var b64Img;
$.when(TokenForSharePoint()).then(function (sharepointToken) {
var url = "https://<tenant>.com/sites/<site>/_api/web/GetFileByServerRelativeUrl('" + relativeUrl + "')/$value";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', url, false);
xmlhttp.setRequestHeader("Authorization", "Bearer " + sharepointToken);
xmlhttp.responseType = 'arraybuffer';
xmlhttp.onloadend = function (e) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var arr = new Uint8Array(this.response);
var raw = '';
var i, j, subArray, chunk = 5000;
for (i = 0, j = arr.length; i < j; i += chunk) {
subArray = arr.subarray(i, i + chunk);
raw += String.fromCharCode.apply(null, subArray);
}
b64Img = btoa(raw);
}
else {
errorResults.Location = url;
errorResults.ErrorCode = xmlhttp.status;
errorResults.ErrorResponseText = xmlhttp.statusText;
errorResults.ErrorMessage = "Unable to Load Image",
ErrorHandler(errorResults);
}
};
xmlhttp.onerror = function (error) {
MessageWindow();
};
xmlhttp.send();
return defferedVarVlalue.resolve(b64Img);
});
return defferedVarVlalue.promise();
};
答案 0 :(得分:0)
我的脚本也不适用于safari