require.jsで別のドメインからhtmlを取得したいと思います。私はCORSの方針でこれを簡単に認めていないことを知っています。注:Webサーバー(Access-Control-Allow-Origin "*"と他のディレクティブ)とrequire.jsを設定して、JSとCSSファイル(CSSはrequire-cssプラグイン)を他のドメインから期待どおりに読み込むように設定しました。しかし、ブラウザのネットワークプロトコルでは、HTMLコンテンツが読み込まれることさえわかります。しかし、このコンテンツはrequire関数に渡されません!ブラウザがコンテンツを取得しますが、require.jsは...、それをパラメータとして提供していませんRequireJSテキストプラグイン:他のドメインからHTMLを読み込むことができません。
マイ設定:
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
});
2つのノート:useXhr
設定がrequire.js text plugin adds “.js” to the file nameから取られているが、それは違いはありませんそれが存在するかどうか。 htmlTemplateパスに?
を追加しました。これにより、.js
はURLに追加されず、ブラウザはhtmlコンテンツを読み込みます。残念ながら、残念ながらrequire.jsはパラメータhtmlTemplate
に渡しています。
どうすればよいですか?私がrequire.js optimizerを使用すると、生成されたファイルにこの問題はもうなくなります(しかし、それはうまくいきます...)。しかし、すべての編集で最適化をせずにJSを開発する必要があります。
更新:1つの解決策が見つかりましたが、誰かが「正しい」解決策を提供できれば嬉しいです。
@ルイス私は質問を更新しました。これはrequireコールの 'text!htmlTemplate'です。私の返事でそれを得たなら、私はもうテキストをダウンロードしないので、テキストプラグインを完全に無視することができます。むしろそれはJSモジュールです。だから私はなぜドキュメントが「テキスト!」が削除される可能性があると言っていないのだろうかと疑問に思っています...混乱しています.... – robsch
ドキュメンテーションがこのように書かれている理由は私には不明です。私が持っている唯一の仮説は、最大の柔軟性のために書かれたということです。あなたが 'text!foo'を持っていて、' foo.html'がローカルであるか 'foo.html'が別のサーバ上にあるかもしれない複数の設定で作業しているなら、あなたは' require([テキスト!foo.html ']) '。変更されるのは、RequireJSに与える設定と、 'GET'リクエスト(HTMLを直接使うか、モジュールでラップするHTMLか)にどのように反応するかだけです。 – Louis
@Louis私は自分の問題を見つけたと思う。別の[回答](http://stackoverflow.com/a/38369034/57091)を追加しました。 – robsch