XMLHttpRequest不在Safari

时间:2017-03-21 21:59:50

标签: javascript safari xmlhttprequest

背景

目前正在开发一个必须适用于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();

};

1 个答案:

答案 0 :(得分:0)

我的脚本也不适用于safari