Ich möchte etwas HTML von einer anderen Domain mit require.js holen. Ich weiß, dass CORS-Richtlinien das nicht einfach erlauben. Hinweis: Ich habe den Webserver (mit Access-Control-Allow-Origin "*" und anderen Direktiven) und require.js so weit konfiguriert, dass alle JS- und CSS-Dateien (css mit require-css-Plugin) wie erwartet von der anderen Domäne geladen werden - nur das Holen von HTML macht Probleme. Aber im Browser-Netzwerk-Protokoll kann ich sehen, dass der HTML-Inhalt sogar geladen wird. Dieser Inhalt wird jedoch nicht an die Funktion require übergeben! Der Browser erhält den Inhalt, aber require.js liefert sie nicht als Parameter ...RequireJS text plugin: HTML kann nicht von einer anderen Domain geladen werden
Meine Konfiguration:
requirejs.config({
baseUrl: "http://some.other.domain/",
paths: {
jquery: 'ext/jquery/jquery.min',
htmlTemplate: 'test.html?',
siteCss: '../css/site'
},
shim: {
htmlTemplate: [
'css!siteCss'
]
},
config: {
text: {
useXhr: function (url, protocol, hostname, port) {
return true;
}
}
},
map: {
'*': {
text: 'ext/require/text',
css: 'ext/require/css.min'
}
}
});
require(['text!htmlTemplate'], function (htmlTemplate) {
console.log(htmlTemplate); // prints 'undefined' into the console
});
Zwei Anmerkungen: Die useXhr
Konfiguration von require.js text plugin adds “.js” to the file name genommen wird, aber es macht keinen Unterschied, ob es da ist oder nicht. Ich habe einen ?
an htmlTemplate Pfad angehängt. Damit wird der .js
nicht an die URL angehängt und der Browser lädt den HTML-Inhalt - wie gesagt, leider ohne dass require.js ihn an den Parameter htmlTemplate
übergibt.
Was kann ich tun? Ich habe gelesen, dass wenn ich das require.js optimizer benutze, würde die generierte Datei dieses Problem nicht mehr haben (aber das funktioniert ...). Aber ich muss mein JS ohne Optimierung bei jeder Bearbeitung entwickeln.
Update: Eine Lösung gefunden, aber ich würde mich freuen, wenn jemand die "richtige" Lösung bieten kann.
@Louis Ich habe die Frage zu aktualisieren. Es ist jetzt "text! HtmlTemplate" im Request-Aufruf. Wenn ich es in meiner Antwort richtig verstanden habe, könnte ich das Text-Plugin komplett ignorieren, da ich keinen Text mehr herunterlade, sondern ein JS-Modul. Ich frage mich also, warum das Dokument nicht sagt, dass "Text!" Entfernt werden könnte ... Confusing .... – robsch
Es ist mir unklar, warum die Dokumentation auf diese Weise geschrieben ist. Die einzige Hypothese, die ich habe, ist, dass es für maximale Flexibilität geschrieben wurde. Wenn Sie 'text! Foo' haben und mit mehreren Konfigurationen arbeiten, wobei' foo.html' lokal oder 'foo.html' auf einem anderen Server sein kann, müssen Sie keinen Aufruf wie' require ([' Text! foo.html ']) '. Die einzige Sache, die sich ändert, ist die Konfiguration, die Sie RequireJS geben und wie Sie auf die Anfrage 'GET' reagieren (entweder mit dem HTML direkt oder HTML in einem Modul). – Louis
@Louis Ich glaube, ich habe mein Problem gefunden. Eine weitere [Antwort] hinzugefügt (http://stackoverflow.com/a/38369034/57091). – robsch