Frage

Ich habe eine Javascript-Datei auf einem Server, die ich nicht ändern kann.

Hier ist ein Beispiel des Skripts, das ich herunterladen muss:

var tags = '';
tags += '<a href="#somelink"><img src="someimage.gif"/></a>;
document.write(tags);

Ich habe angefangen, das Skript über AJAX herunterzuladen und auszuführen, bin aber auf das Problem „document.write kann nicht in einem asynchronen Aufruf ausgeführt werden“ gestoßen.

Deshalb wollte ich das Skript als Klartext herunterladen und das, was ich benötige, aus der Antwort nehmen und es an der richtigen Stelle auf meiner HTML-Seite platzieren, ohne das ursprüngliche Skript zu ändern.

$.ajax({
    type: "GET",
    url: "http://myurlexample.com",
    dataType: "text",
}).success(function(msg){
    console && console.log("The script was downloaded as text: "+msg);
}).error(function(object,status,errortxt){
    console && console.log("The script wasn't downloaded as text. The error:"+ errortxt);
});

Aber AJAX gibt einen Fehler aus, wenn ich die Download-Anfrage mit mache dataType = "text".Gibt es eine Möglichkeit, dies zu umgehen und es tatsächlich als Text herunterzuladen?

P.S.:Das Skript ist für eine Firefox OS-privilegierte App, daher kann ich das Skript nicht direkt in die HTML-Seite einfügen, da der Sicherheits-CSP dies nicht zulässt (https://developer.mozilla.org/en-US/Apps/CSP).

War es hilfreich?

Lösung

Da du es scheinbar kannst laufen Nachdem ich das Skript irgendwie erfolgreich ausgeführt habe, ist hier eine schreckliche Idee, die funktionieren könnte:überschreiben document.write.

Bevor Sie das Skript ausführen, gehen Sie wie folgt vor:

document.write = function(msg) {
    handleTagStringInApp(msg);
    delete document.write; // revert to original document.write when done
};
// now load execute the script...

Wo handleTagStringInApp ist eine von Ihnen geschriebene Funktion, die die Tag-Zeichenfolge irgendwie verarbeitet.Dies ist im Grunde JSONP, aber Sie können den Rückrufnamen nicht so anpassen, dass er unauffällig oder hilfreich ist, sondern müssen stattdessen den Rückrufnamen verwenden document.write.

Beachten Sie, dass dies der Fall sein wird wirklich schlecht ob tatsächlich etwas anderes in Ihrer App verwendet werden muss document.write.(Sie können dies in Ihrem eigenen Code umgehen, indem Sie einen Verweis auf die Realität beibehalten document.write, z. B. mit var realDocWrite = document.write; beim Laden der Seite und Aufrufen mit realDocWrite.call(document, "whatever").)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top