2017-03-21 1 views
0

BackGroundXMLHttpRequest nicht ausgeführt in einem Safari

Derzeit auf einer Webseite arbeiten, die für Mac OS und Windows arbeiten müssen. Zur Zeit. Ich habe diesen Code im IE getestet und es funktioniert gut, aber wenn es um Mac OS geht, scheint es nun korrekt ausgeführt zu werden, so wie es mit Windows funktioniert.

Problem

isolierte ich das Problem, das das Problem in Mac OS verursacht. Dies ruft eine Sharepoint Doc lib auf, die wiederum ein Byte-Array zurückgibt, das später eine Base64-Zeichenfolge erzeugt, die das Problem verursacht. Ich habe das Dokument über die Kompatibilität von XMLHttpRequest mit Safari im Folgenden gelesen und gezeigt, dass es kompatibel ist. Nicht sicher, warum es in IE so gut funktioniert, aber nicht in Safari funktioniert.

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

-Code

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(); 

};

Antwort

0

auch mein Skript funktioniert nicht mit Safari

+1

in meinem Skript ein XMLHttp gibt es, die ein PHP-Skript aufrufen, die Daten in eine Datenbank einfügen müssen, aber es mit Safari nicht funktioniert und ich weiß nicht, Warum – orto

Verwandte Themen