- ベストアンサー
'<s' + 'cript とsを切り離すのはなぜ?
とあるサイトを表示すると、別窓で広告系の別サイトが表示されます。 (これについては別の質問で投稿してあります) 別窓表示の部分はJavaScriptで記述されていて 通常なら document.write('<script src="~ だと思うのですが、なぜか document.write('<s' + 'cript src="~ と、わざわざsだけ切り離してあります。 これは、例えばポップアップブロック回避などで使われる悪意のある記述方法なのでしょうか? それとも、なんらかの不具合回避などで使われる正常な記述方法なのでしょうか?
- Orange6999
- お礼率75% (6/8)
- JavaScript
- 回答数4
- ありがとう数3
- みんなの回答 (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 の規定に沿わないツールを使った結果生じた変てこりんな産物か、どちらかでしょう。
その他の回答 (3)
- t_netbug
- ベストアンサー率34% (15/44)
お礼
回答ありがとうございます。 仕様上の問題でHTMLの終了タグ </ が使えないんですね。 書いてある内容が難しすぎて半分も理解出来ていないかもですが^^;
- yyr446
- ベストアンサー率65% (870/1330)
No1.です 訂正 document.writeの時だけです。
- yyr446
- ベストアンサー率65% (870/1330)
ソースの中に <script> とか </script> の記述があると、例えリテラル文字列でも、コメントでも ブラウザーが勝手に、よけいな親切に、文法間違いを中途半端に 補正しようとしたりして、 本来のタグとして解釈したりする事があります。 だから、わさわさ離してくっつけているのだと思います
お礼
ありがとうございます。 悪意のある記述方法では無く、よくある不具合回避法なのですね。
関連するQ&A
- ページは表示されたけれど、エラーが出ます。
過去の質問を調べたのですが、見つけられなかったので、質問させてください。 自社サイトのページを開くと、ステータスバーに 「ページが表示されましたが、エラーがあります。」と表示されました。 エラーの詳細は下記のとおりです。 ライン:18 文字:51 エラー:')'がありません コード:0 ソースに問題があるのかと思ったのですが、 下記がそのソースです。 <SCRIPT language="javascript" type="text/javascript" src="../js/common_lib.js"></SCRIPT> <SCRIPT type="text/javascript" src="../js/css_junction2.js"></SCRIPT> <SCRIPT language="JavaScript"> <!-- document.write("<img src='http://700700.jp/acc/acclog.cgi?"); document.write("referrer="+document.referrer+"&"); document.write("width="+screen.width+"&"); document.write("height="+screen.height+"&"); document.write("color="+screen.colorDepth+"' alt="">"); // --> </SCRIPT> どこをどう直せばよいのかよくわからないので、 もしお分かりの方がいらっしゃいましたら、 お教えいただけますでしょうか? よろしくお願いいたします。
- 締切済み
- その他(インターネット・Webサービス)
- <script type="text/javascript" src= について
よろしくお願いします。JavaScriptは、ほとんど触ったことがなく、現在記述がわからず困って今sう。 htmlファイルの中から、外部ファイルに引数(referre)をつけて渡したく思います。で以下のようにやってみたのですが、 index.html <script type="text/javascript" src="http://hoge.com/info.php?ref=' + document.write(document.referrer) + '" charset="Shift-JIS"></script> info.php $ref = $_GET['ref']; echo document.write('$ref'); info.phpから返ってくる答えは「' document.write(document.referrer) ' 」です。 index.html内の JAVASCRIPT部分が間違っているに違いないのですが、どうやって記述すればよろしいでしょうか? よろしくお願いします。
- ベストアンサー
- JavaScript
- JavaScriptでエスケープ。<script
JavaScriptで、下記文字列(<script~</script>)を変数に入れ、処理後にdocument.writeしたいです。 <script type="text/javascript" src="http://hoge.jp/s/"></script> どのようにエスケープしたら良いでしょうか?
- ベストアンサー
- JavaScript
- 同じJavaScriptを共通にして、別ファイルにする方法は(ソース付き)?
よろしくお願いします。 ログの出力をするために、全てのページに同じJavaScriptを埋め込んでいます。 ただ、あまりにも行数が多くなる可能性があるので、この部分を1つのファイルにまとめたいと思っています。 具体的には、現状を変更後のようにしたいと思います。 そこで、Common.jsにはどのように記述をすれば良いでしょうか? ●現状 </table> <SCRIPT Language="JavaScript"> <!-- document.write("width="+screen.width+"&"); document.write("height="+screen.height+"&"); document.write("color="+screen.colorDepth+"'>"); // --> </SCRIPT> <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "********"; urchinTracker(); </script> </body> </html> ↓↓↓ ●変更後 </table> <SCRIPT SRC="../scripts/Common.js"></SCRIPT> </body> </html>
- 締切済み
- HTML
- PHPによるアクセスカウンタのサンプルの改造
このサイトにあるアクセスカウンタのサンプルをお借りして、 http://www.web-jozu.com/php/counter_s.html 画像を使わず、よりシンプルなテキストカウンタを設置したいのですが、 上記ページにある、下記の記述の<img>タグを何とかすれば よさそうにも思いますが、どのように書き換えたらよいでしょうか? <script language="JavaScript" type="text/javascript"> <!-- //桁数を入力 posNum = 7; document.write('<img src="cts/counter_s.php?pos=0" width="0" height="0">'); for(i=posNum; i>0; i--){ document.write('<img src="cts/counter_s.php?pos=' + i + '">'); } --> </script> #念のため。サイトの利用規定に「Scriptの改造や再配布はご自由にしていただいて構いません」という断りを確認のうえで質問させていただきます。
- ベストアンサー
- PHP
- document.writeの文字列が実行されるタイミング
javascriptで<script>タグの表示をdocument.writeで行ったところ、 直後に、<script>ソースの関数呼び出しでリンク切れになったのですが、 なぜでしょうか。 document.writeの文字列が実行されるタイミングっていつなんでしょうか。 <script> document.write('<script type="text/javascript" src="hoge.js"></script>'); hoge(); </script> ※hoge()はhoge.js内で定義されています。
- ベストアンサー
- JavaScript
- 外部リンクについて質問です。
通常のリンクは下のような感じで外部から呼び出してきますが、 <script type="text/javascript" src="1.js"></script> 例えば、変数Formにアドレスが代入してある場合どのようにsrcに記述したらいいのでしょうか? document.write(Form); で確認すると、ちゃんと「1.js」と出ます。 FormはJavaScript内での変数です。 色々試して、 <script type="text/javascript" src="Form"></script> <script type="text/javascript" src=Form></script> など、他にもいくつか試しましたがうまくいきません。 代入値をアドレスとして使えないのでしょうか? もう完全に行き詰って全く分かりません。 すみませんが分かる方よろしくお願いします。
- ベストアンサー
- JavaScript
- JavaScript のdocument.writ
JavaScript で以下のような感じでdocument.write内にスクリプトを記述させたいのですが、うまくいきません。 document.write(“<script type="text/javascript" language="javascript">var aa_conf = {site:458,frame:13,width:125,height:125,color:["ffffff","FFFFFF","2200CC","F25D5D","671F28"],host:'aa.aa.jp',ver:1.1};</script><script type="text/javascript" language="javascript" src=http://aaa.com/a.js charset="utf-8"></script>”); \を”の前にいれたり、<script>を二行に分けたり、いろいろしてみたのですが、解決しません。 よろしくお願いします。
- 締切済み
- JavaScript
- JavaScriptを最後に実行するには?
JavaScriptでリンクをランダムに表示するようにしたところ、 少し表示が遅く感じるようになったため、 最後にJavaScriptを実行するようにonloadイベントを使って [外部(JavaScript)ファイル] <!-- window.onload = function onload(){ var random = Math.floor(Math.random() * 3); if(random == 0) document.write('<a href="URL1">サイト名1</a>'); else if(random == 1) document.write('<a href="URL2">サイト名2</a>'); else if(random == 2) document.write('<a href="URL3">サイト名3</a>'); }; //--> [HTMLファイル内] <script type="text/javascript" src="./フォルダ名/ファイル名.js"></script> のように書いて試しましたが、真っ白なページにこのスクリプトの内容だけが表示されてしまいます。 "window.onload = function onload{"と、最後の"};"の部分を追加するまでは普通に動いていました。 また、ページ内に、別の外部ファイルも含めて同じようなものを複数組み込みたいと思っています。 この方法でなんとか表示したいのですが、 別の方法も含め、情報をいただきたいです。 わかりにくいところがあれば補足します。 よろしくお願いします。
- ベストアンサー
- JavaScript
- javascriptが動かない
javascript初心者です。 画面を三分割し、画面ロード時にそれぞれのフレームの位置を表示するという、サンプル的なのを作ったのですが、画面は分割されますが、上、左、右 ってのが表示されないです。 javascriptの記述の仕方が根本的に違いますかね? 下記に書いてあるのがそのソースコードです。 どなたかお願いします。 <html> <head> <title>FrameSample</title> <script type="text/javascript" > function frameinit(){ frames["top"].document.write("上"); frames["left"].document.write("左"); frames["right"].document.write("右"); } window.onload=frameinit; </script> </head> <frameset rows="100,*"> <frame src="newpage4.html" name="top" > <frameset cols="50,50"> <frame src="newpage4.html" name="left"> <frame src="newpage4.html" name="right"> </frameset> </frameset> </html>
- 締切済み
- JavaScript
お礼
詳しい回答ありがとうございます。 '</' がダメだからそのために工夫が必要なのですね。 今回疑問に思った記述が <script language="JavaScript"> document.write('<s' + 'cript src="http://~~~ '">'); document.write('</' + 's' + 'cript>'); </script> なので、'</' の記述を回避していないおかしな記述って事だと思います。
補足
一応、疑問の元となったサイトも記載しておきます。 映画の紹介サイトで、先月まで無かったポップアップ広告が今月になって急に出るようになって、そのJavaScriptの記述方法が質問内容の通りでした。 見る時間帯によって、別窓が出たり出なかったりしますが、広告ページは海外アドレス(.co.uk)になっています。 ポップアップの事について聞いた質問 http://oshiete1.goo.ne.jp/qa5378330.html 疑問の元となったサイト CINEMA TOPICS ONLINE:シネマトピックスオンライン http://www.cinematopics.com/cinema トップページのソースの最下部にこの記述があります。