とあるサイトを表示すると、別窓で広告系の別サイトが表示されます。
(これについては別の質問で投稿してあります)
別窓表示の部分はJavaScriptで記述されていて
通常なら
document.write('<script src="~
だと思うのですが、なぜか
document.write('<s' + 'cript src="~
と、わざわざsだけ切り離してあります。
これは、例えばポップアップブロック回避などで使われる悪意のある記述方法なのでしょうか?
それとも、なんらかの不具合回避などで使われる正常な記述方法なのでしょうか?
No.4ベストアンサー
- 回答日時:
率直に言えば無意味です。
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 の規定に沿わないツールを使った結果生じた変てこりんな産物か、どちらかでしょう。
この回答への補足
一応、疑問の元となったサイトも記載しておきます。
映画の紹介サイトで、先月まで無かったポップアップ広告が今月になって急に出るようになって、そのJavaScriptの記述方法が質問内容の通りでした。
見る時間帯によって、別窓が出たり出なかったりしますが、広告ページは海外アドレス(.co.uk)になっています。
ポップアップの事について聞いた質問
http://oshiete1.goo.ne.jp/qa5378330.html
疑問の元となったサイト
CINEMA TOPICS ONLINE:シネマトピックスオンライン
http://www.cinematopics.com/cinema
トップページのソースの最下部にこの記述があります。
詳しい回答ありがとうございます。
'</' がダメだからそのために工夫が必要なのですね。
今回疑問に思った記述が
<script language="JavaScript">
document.write('<s' + 'cript src="http://~~~ '">');
document.write('</' + 's' + 'cript>');
</script>
なので、'</' の記述を回避していないおかしな記述って事だと思います。
No.3
- 回答日時:
回答ありがとうございます。
仕様上の問題でHTMLの終了タグ </ が使えないんですね。
書いてある内容が難しすぎて半分も理解出来ていないかもですが^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- HTML・CSS HTMLの条件によって表示方向が切り替わる実装のコードを教えて下さい。 (コードは下記リンクを参照) 1 2022/09/25 14:35
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Firefox(ファイヤーフォックス) Firefoxでグーグルの検索画面が変です 2 2022/09/20 19:25
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- Excel(エクセル) 関数を用いて表示したセルの内容を、見えている形でコピーする方法 2 2022/09/14 16:36
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウインドウの後ろに隠れている...
-
Cygwinでログをのこす方法
-
jquery uiが動かない
-
フォルダ名の取得方法
-
showModalDialogで開いた画面か...
-
javaからcgiの呼び出し
-
Vbscriptで自分自身のウィンド...
-
onbeforeunload時のwindow.open...
-
PrintScreenキーを無効にしたい
-
JavaScript関数呼出し元の要素...
-
javascriptでbgmを自動再生する...
-
undefinedが表示されてしまう
-
<aタグで変数に文字を代入
-
Java ScriptでIPによるアクセス...
-
文字を入れ替わり表示させたい...
-
Google scriptについて 至急scr...
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
別ファイルのfunctionの読み込み方
-
(Javascript)印刷するファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
JavaScriptからVBScriptの呼び...
-
onbeforeunload時のwindow.open...
-
Vbscriptで自分自身のウィンド...
-
ウインドウの後ろに隠れている...
-
javascriptでtableの該当行を削...
-
Cygwinでログをのこす方法
-
Java ScriptでIPによるアクセス...
-
確認ダイアログで「キャンセル...
-
showModalDialogで開いた画面か...
-
ASPで取得した情報をscriptタグ...
-
JavaScript関数呼出し元の要素...
-
datepickerで日付の値を取得したい
-
文字を入れ替わり表示させたい...
-
毎回、ページ読み込み時に1回...
-
location.reload() について
-
曜日ごとにリンク先を変えるJav...
-
window.onloadイベントの任意実...
-
undefinedが表示されてしまう
-
ブラウザの「戻る」ボタンを押...
おすすめ情報