URLがプレーンテキストファイルを参照する<script type="text/plain" src="http://..."></script>
を使用する場合、JavaScriptでファイルのコンテンツにアクセスする方法はありますか?ファイルはブラウザに転送されますが、innerHTML
要素のscript
プロパティの値は変更されません(空の文字列のままです)。 DOMの要素ノードを調べても、受信したコンテンツを見つけることができるプロパティは明らかにならないようです。
代わりにXMLHTTPRequestを使用できることは知っていますが、ブラウザが説明した方法でデータをフェッチするのに、アクセスを提供していないように見えるという問題に興味があります。
まず、text
のHTMLScriptElement
attributeは、インラインの<script>
要素のテキストにアクセスするための推奨される方法です。 DOM-Level-2 および HTML5:4.11.1 どちらも、スクリプトが内部のスクリプトを含む属性text
を持つ必要があることを示していますテキスト:
IDL属性
text
は、script
要素の子であるすべてのテキストノードのコンテンツの連結をツリー順に返す必要があります(コメントや要素などの他のノードは無視します)。設定時には、textContent
IDL属性と同じように機能する必要があります。
<script>
要素が空(外部ソースを指定した)であるため、text
、textContent
、およびinnerHTML
は空です。これは、text
属性がインラインスクリプトでのみ設定されるためです。
スクリプトがインラインで、スクリプトブロックのタイプがテキストベースの言語である場合:
要素の「すでに開始されました」フラグが最後に設定されたときの
text
IDL属性の値がスクリプトソースです。
したがって、このメソッドを使用して外部text/plain
を含めることはできません。
参照:
<script src="game-engine.js"></script> <!-- game engine isn't inline --> <script type="text/x-game-map"> <!-- but data needs to be inline --> ........U.........e o............A....e .....A.....AAA....e .A..AAA...AAAAA...e </script>
これがサポートされている場合、それは巨大なセキュリティホールを提供し、jsonやその他のデータを保護するクロスサイトスクリプティング保護を回避する手段を提供することに注意してください。基本的に、私の厄介なWebページ(nasty.comなど)は、スクリプトタグを使用してロードすることにより、Cookieで保護されている個人データにアクセスできます。例えば.
<script type="text/plain"
src="https://supersecure.com/youraccount/privatedocs/list"/>
Supersecure.comのCookieはリクエストとともに自動的に送信されるため(リソースをリクエストする場合と同様)、セキュアサイトはリクエストを簡単に区別できなかったため、データ(プライベートドキュメントのリストなど)を返すだけです。正当なWebページからのajaxリクエストからのものから。同じOriginポリシーのおかげで、ブラウザはnasty.comからのページがsupersecure.comにajaxリクエストを送信するのを単に防ぐため、この穴はajaxには存在しません。
明らかに、インラインデータにはセキュリティ上の問題はありません。
同じ質問を数日間調査した後、次のコードへの参照がいくつか見つかりました。
<html>
<head>
<script type="text/javascript">
function init() {
var extText = window.frames.messageTxt.document.body.lastChild.lastChild.data;
extText = extText.replace(/[\r\n]/g, " ");
document.forms[0].nMessage.value = extText;
}
window.onload = init;
</script>
</head>
<body>
<iframe name="messageTxt" src="txtData.txt" style="display:none"></iframe>
<form>
<textarea name="nMessage"></textarea>
<input type="button" value="click" onClick="init()">
</form>
</body>
</html>
上記のコードは、実際にはtxtData.txtファイルにアクセスし(存在する場合)、デフォルトのテキストとして<textarea>
にダンプします。何らかの理由で、上記の応答のいずれもこれが機能することを述べていません。質問は特に<src>
タグを暗示しているように思われるためです(同様の手法が利用できない場合があります。チェックしていません)。ただし、クエリが外部の.txtファイルを取得するというより一般的な質問に関係していると仮定することは言及する価値があると思います(またはこのページに出くわした誰かがその質問の答えを探している場合)、主にそれを調査するのに何時間もかかったからですですから、答えを出すのが難しいのはもっともらしいと思います。
ええ、いいえ、そのようなテキストコンテンツを入手できるとは思いません。これは主に、domアクセス要素を使用して、dom自体に実際には挿入されなかったテキストを取得するためです。
いくつかのオプションを試しましたが、機能しませんでした。あなたがそれを見つけることができないという確かな理由はありませんが、私が諦めている/このように考えている理由は、私が使用しているWebKitインスペクターでさえ三角形の開示がないためですscript-srcタグの横。それが行うことは、srcをクリックできるリンクに変換し、Ajaxなどを使用してサーバーからそのテキストを読み戻すことです。