2017-10-02 5 views
1

Ich bin auf der Suche nach einer Möglichkeit, eine externe .js-Datei aufzunehmen und die Antwort-Header von dieser Anfrage erhalten.Abrufen Antwort Header von externen Javascript-Datei

<script src="external/file.js?onload=callback"> 
function callback(data) { 
    data.getAllResponseHeaders(); 
} 
</script> 

Offensichtlich scheint dies nicht zu funktionieren.

Wie bekomme ich die Antwort-Header von einschließlich der Javascript? Es kann keine zweite Anfrage sein.

In Ihrer Antwort vermeiden Sie bitte die Verwendung von jQuery.

Danke für jede Hilfe.

Arbeitsbeispiel Dank gaetanoM

oXmlHttp.withCredentials = true; is for CORS 

oXmlHttp.responseType = 'text'; is for DOM input? 

Hier ist der Code, den ich jetzt verwenden;

<script> 
    function loadScript(url) { 

    var oXmlHttp = new XMLHttpRequest();    
     oXmlHttp.withCredentials = true; 
     oXmlHttp.responseType = 'text'; 
     oXmlHttp.open('GET', url, true); 
     oXmlHttp.onload = function() { 

      if(oXmlHttp.status >= 200 || oXmlHttp.status == XMLHttpRequest.DONE) { 

      var x = oXmlHttp.getAllResponseHeaders(); 
      console.log(x); 

      if(oXmlHttp.responseText !== null) { 

       var oHead = document.getElementsByTagName('HEAD').item(0); 
       var oScript = document.createElement("script"); 
        oScript.language = "javascript"; 
        oScript.type = "text/javascript"; 
        oScript.defer = true; 
        oScript.text = oXmlHttp.responseText; 
        oHead.appendChild(oScript); 

      } 

      } 

     } 
     oXmlHttp.send(); 
    } 

    loadScript("http://url/to/file.js");   
</script> 

Antwort

1

getAllResponseHeaders(): Die XMLHttpRequest.getAllResponseHeaders() Methode gibt alle Antwortheader, durch CRLF getrennt sind, als String oder null, wenn keine Antwort empfangen wurde. Wenn ein Netzwerkfehler aufgetreten ist, wird eine leere Zeichenfolge zurückgegeben.

Das bedeutet, müssen Sie die externen js mit einem XMLHttpRequest laden:

Darüber hinaus wird in dieser Art und Weise Sie die Datei nur einmal laden.

function loadScript(url) { 
    var oXmlHttp = new XMLHttpRequest(); 
    oXmlHttp.onreadystatechange = function() { 
     if (oXmlHttp.readyState == XMLHttpRequest.DONE) { 
      if (oXmlHttp.status == 200) { 


       var x = oXmlHttp.getAllResponseHeaders(); 
       console.log(x); 


       if (oXmlHttp.responseText != null) { 
        var oHead = document.getElementsByTagName('HEAD').item(0); 
        var oScript = document.createElement("script"); 
        oScript.language = "javascript"; 
        oScript.type = "text/javascript"; 
        oScript.text = oXmlHttp.responseText; 
        oHead.appendChild(oScript); 
       } 
      } else { 
       console.log("Error", oXmlHttp.statusText) 
      } 
     } 
    } 
    oXmlHttp.open('get', url); 
    oXmlHttp.send(); 
} 


loadScript("11.js?onload=callback"); 
+1

genau das, was tut ich es, danke machen wollte! Für CORS habe ich oXmlHttp.withCredentials = true; –

+0

Die Funktion erstellt 3 Skriptblöcke in . 1 ist leer, die 2 anderen sind das Javascript, das es abruft. Ich verstehe nicht, warum es das tut. –

+0

Ich habe Ihr Skript ein wenig geändert, vor allem die onreadystatechange zu onload, weil es die Funktion mehrere Male auslösen würde. –