[解決済み】document.write()で書くとき、なぜ<script>タグを分割するのですか?)
質問
一部のサイト(またはクライアントにJavaScriptコードを提供する広告主)では、どうして
<script>
および
</script>
タグを
document.write()
を呼び出すのですか?
例えば、Amazonもそうしていることに気づきました。
<script type='text/javascript'>
if (typeof window['jQuery'] == 'undefined') document.write('<scr'+'ipt type="text/javascript" src="http://z-ecx.images-amazon.com/images/G/01/javascripts/lib/jquery/jquery-1.2.6.pack._V265113567_.js"></sc'+'ript>');
</script>
解決方法は?
</script>
を分割しなければならないのは、そうしないと囲んでいる
<script></script>
ブロックが早すぎます。本当は
<
と
/
というのも、スクリプトブロックは(SGMLによれば)次のようになるはずだからです。
は、任意の終了タグオープン(ETAGO)シーケンスで終了する(すなわち
</
)
:
STYLEとSCRIPT要素は、そのデータ・モデルにCDATAを使いますが、これらの要素では、CDATAはユーザー・エージェントによって異なった方法で扱われなければなりません。マークアップと実体は、生のテキストとして扱われ、そのままアプリケーションに渡されなければなりません。文字シーケンス "の最初の出現。
</
"(エンドタグオープンデリミタ)は、要素の内容の終端を示すものとして扱われます。有効な文書では、これは要素の終了タグとなる。
しかし、実際にはブラウザはCDATAスクリプトブロックのパースを、実際の
</script>
クローズタグを使用します。
XHTML では、スクリプトブロックに対してこのような特別な処理は行われません。
<
(または
&
を含む文字でなければなりません。
&escaped;
他の要素と同様です。しかし、XHTMLを旧来のHTMLとして解析しているブラウザは混乱するでしょう。CDATAブロックを使った回避策もありますが、単純にこれらの文字をアンエスケープで使わないようにするのが一番簡単です。どちらのタイプのパーサーでも動作する script 要素を script から書くより良い方法は、次のとおりです。
<script type="text/javascript">
document.write('\x3Cscript type="text/javascript" src="foo.js">\x3C/script>');
</script>
関連
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] セルフクローズスクリプトエレメントが機能しないのはなぜですか?
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] scriptタグの中にCDATAセクションが必要なのはどんな場合ですか?
-
[解決済み] スクリプトタグ - 非同期と遅延
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】フォームコントロールの値アクセサがない
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み] テスト
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】中央値の計算 - javascript