スクリプトをAJAXでプレーンテキストとしてロードできません
-
20-12-2019 - |
質問
私はサーバーにJavaScriptファイルを持っています。
これは私がダウンロードしなければならないスクリプトのサンプルです:
var tags = '';
tags += '<a href="#somelink"><img src="someimage.gif"/></a>;
document.write(tags);
.
私はAjaxを介してスクリプトのダウンロードを開始し、それを実行しましたが、「Document.Writeは非同期通話では実行できません」という問題があります。
だから私はスクリプトをプレーンテキストとしてダウンロードし、そして反応から必要なものを取り、元のスクリプトを修正せずに私のHTMLページに入るべきかを置くことを渡した。
$.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);
});
.
しかし、dataType = "text"
を使用してダウンロード要求を実行すると、Ajaxがエラーをスローします。これを回避し、実際にテキストとしてダウンロードする方法はありますか?
PS:スクリプトはFirefox OS特権アプリのためのものであるため、セキュリティCSPはそれを許可しないため、スクリプトをHTMLページに直接入力することはできません( https://developer.mozilla.org/en-us/apps/csp )
解決
を実行できるように思われるので、これは何がうまく機能する可能性があるひどいアイデアです:document.write
を上書きします。
スクリプトを実行する前に、
document.write = function(msg) {
handleTagStringInApp(msg);
delete document.write; // revert to original document.write when done
};
// now load execute the script...
.
ここで、handleTagStringInApp
は、タグ文字列をどういうわけか処理する機能です。これは基本的にjsonpですが、コールバック名を目立つものでも有用なものに調整することはできません。代わりにコールバック名document.write
を使用する必要があります。
アプリ内の他のものが実際にdocument.write
を使用する必要がある場合、これは本当に悪いになります。(あなたは、ページロード時のdocument.write
を使用して、var realDocWrite = document.write;
を使用して、Real realDocWrite.call(document, "whatever")
を使用して、これを参照してください。)