-PR-
解決済み

'<s' + 'cript とsを切り離すのはなぜ?

  • 暇なときにでも
  • 質問No.5379789
  • 閲覧数261
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 75% (6/8)

とあるサイトを表示すると、別窓で広告系の別サイトが表示されます。
(これについては別の質問で投稿してあります)
別窓表示の部分はJavaScriptで記述されていて
通常なら

document.write('<script src="~
だと思うのですが、なぜか

document.write('<s' + 'cript src="~
と、わざわざsだけ切り離してあります。

これは、例えばポップアップブロック回避などで使われる悪意のある記述方法なのでしょうか?
それとも、なんらかの不具合回避などで使われる正常な記述方法なのでしょうか?
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル10

ベストアンサー率 60% (79/130)

率直に言えば無意味です。

script 要素内で避けねばならないのは '</' です。SGML 規定に従えば、対応する完全な終了タグ </script> が無くとも、'</'(その後ろに名前文字)が現れた時点で script 要素を終了することになっているからです。従って、注意深いコードであれば '<\/script>' あるいは '<' + '/script>' のように書かれているはずです。

一部のブラウザやプログラムでは、script 要素中に '</script>' が現れた時点で script 要素の終わりと見なします。そういう場合、

<script type="..">document.write('<script type=".."></script>');</script>

では以下の内容が「余って」しまいます。

');</script>

</script> は無視されますので、「');」がブラウザ上に表示されるでしょう。記憶にある限りでは MacIE4 がそうです。また、Google などの検索エンジンにもこのような挙動を示すものがあるようで、検索すれば script 要素の解釈ミスによりスクリプトコードが検索本文に反映されてしまったものが大量にヒットします。

そこで、'</scr' + 'pt>' のように切る人が多かったわけですが、これでは最初に述べた SGML 規定上の問題が残ります。そもそも '</' を避けてさえいれば良い話なのです。

あるいは、タグを出力するときに最初から '<' を避けて '\x3C'(JavaScript の場合)にすれば、ほとんどのケースに対応できます。

※更に、ものすごく古いブラウザでは '>' をコメント終端と見なすものもあります(HTML4: 18.3.2)。ブラウザによっては script 要素中に開始タグ '<script>' があるとそれもタグとして解釈するとか <s> と間違わないようにとかいった話もあった気がしますが、検索しても見つからないので私の記憶違いかもしれません。この辺はもう気にしても仕方ないでしょう。

少なくとも今現在、'<s' + 'cript' と切ることに意味はありません。制作者が上記のような事情を勘違いした結果生まれた妙ちくりんな記述が、あるいは、制作者が HTML の規定に沿わないツールを使った結果生じた変てこりんな産物か、どちらかでしょう。
補足コメント
Orange6999

お礼率 75% (6/8)

一応、疑問の元となったサイトも記載しておきます。
映画の紹介サイトで、先月まで無かったポップアップ広告が今月になって急に出るようになって、そのJavaScriptの記述方法が質問内容の通りでした。
見る時間帯によって、別窓が出たり出なかったりしますが、広告ページは海外アドレス(.co.uk)になっています。

ポップアップの事について聞いた質問
http://oshiete1.goo.ne.jp/qa5378330.html

疑問の元となったサイト
CINEMA TOPICS ONLINE:シネマトピックスオンライン
http://www.cinematopics.com/cinema
トップページのソースの最下部にこの記述があります。
投稿日時 - 2009-10-22 19:33:12
お礼コメント
Orange6999

お礼率 75% (6/8)

詳しい回答ありがとうございます。
'</' がダメだからそのために工夫が必要なのですね。

今回疑問に思った記述が

<script language="JavaScript">
document.write('<s' + 'cript src="http://~~~ '">');
document.write('</' + 's' + 'cript>');
</script>

なので、'</' の記述を回避していないおかしな記述って事だと思います。
投稿日時 - 2009-10-22 19:32:03
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル13

ベストアンサー率 65% (870/1330)

ソースの中に
<script>
とか
</script>
の記述があると、例えリテラル文字列でも、コメントでも
ブラウザーが勝手に、よけいな親切に、文法間違いを中途半端に
補正しようとしたりして、
本来のタグとして解釈したりする事があります。
だから、わさわさ離してくっつけているのだと思います
お礼コメント
Orange6999

お礼率 75% (6/8)

ありがとうございます。

悪意のある記述方法では無く、よくある不具合回避法なのですね。
投稿日時 - 2009-10-22 18:59:23


  • 回答No.2
レベル13

ベストアンサー率 65% (870/1330)

No1.です
訂正
document.writeの時だけです。
  • 回答No.3
レベル8

ベストアンサー率 34% (15/44)

お礼コメント
Orange6999

お礼率 75% (6/8)

回答ありがとうございます。
仕様上の問題でHTMLの終了タグ </ が使えないんですね。

書いてある内容が難しすぎて半分も理解出来ていないかもですが^^;
投稿日時 - 2009-10-22 19:07:54
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ