人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

htmlのことで質問です。

以下のコードって、htmlの文法(?)的に大丈夫なのでしょうか?

<script src="data:text/javascript;charset=utf-8,alert(&quot;Hello!&quot;);"></script>
一応、Chromeでは動作しました。


●質問者: Hiroto
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

属性値内に「"」をそのまま記述するといけないので、文字参照で記述しました。一応これだと動作はするのですが、これで大丈夫なのかと思い質問しました。


1 ● うぃんど

(1)使っても良いかという意味の質問であれば、
「ブラウザで実行できるのであればOKというのが実情」なので○です。

ちなみにFirefox19.0.2でも動作しています。
ダブルクォートの代わりにシングルクォートも使えます。

<script src="data:text/javascript;charset=utf-8,alert('Hello!');"></script>

(2)src属性にJAVAScriptコードを直接書き込むことが、
標準的な文法に合っているかどうかという意味の質問であれば、
W3Cのどの勧告に従うかによって、その是非が変わります。

HTML4.01ではURIの指定のみだったので×
http://www.w3.org/TR/1999/REC-html401-19991224/interact/scripts.html

This attribute specifies the location of an external script.


HTML5.0 / HTML 5.1 では○
http://www.w3.org/TR/2012/CR-html5-20121217/scripting-1.html#the-script-element
http://www.w3.org/TR/2012/WD-html51-20121217/scripting-1.html#the-script-element

the scripts may either be embedded inline or may be imported from an external file using the src attribute


うぃんどさんのコメント
訂正します。すみません。 「HTML5.0 / HTML 5.1 でも×」です。 詳細は回答No.2並びに回答No.2内のコメントでのやりとり参照。

2 ● a-kuma3
ベストアンサー

それは違う >No.1 の回答

「HTML5.1 では○」と引用された以下の部分
http://www.w3.org/TR/2012/WD-html51-20121217/scripting-1.html

When used to include dynamic scripts, the scripts may either be embedded inline or may be imported from an external file using the src attribute.

に対応する HTML4.01 での記述はここ。
http://www.w3.org/TR/1999/REC-html401-19991224/interact/scripts.html

The script may be defined within the contents of the SCRIPT element or in an external file.


HTML5.1 で「embedded inline」、HTML4.01 で「contents」と表現されているのは、
<script>?</script> でくくられた中身。
HTML4.01 では、src 属性の説明でちょっと離れたところに書いてあるけど、src 属性で「external file(当の HTML ではない、外部のファイル)」を取り込む、って書いてある。それは、HTML5 も同じです。


質問で出されているのは、正確には「data URI scheme」と言われているもので、URI の一部です。
データを自分の中に持っている、というちょっと変わった定義だけど、データのありかを指し示している URI のひとつの表現です。
RFC2397 (http://tools.ietf.org/html/rfc2397)で定義されています(URL になってるけど)。

URI の一種なので、script タグだけではなく、img タグの src 属性とか、css の url() 指定だとかにも使える(ブラウザが実装していれば)。


RFC2397 は 1998年8月、HTML4.01 は 1999年12月で、data URI scheme が定められた方が、実は先だったりします。
なので、HTML4.01 にもひっそりと object タグのところで言及されていたりする。
http://www.w3.org/TR/1999/REC-html401-19991224/struct/objects.html#h-13.3.1


んで、質問に戻ると、HTML の文法としては、URI にしか見えてないので、許される範囲。
でも、期待通りの動作をするかどうかは、別の問題。
data URI scheme は、IE がまともに実装していないので、クロスブラウザを目指すなら使わない方が無難。
IE は、8 or 9 から画像に対してだけは使えるようになってるはずです。



質問の補足を受けての追記です。

えーっと、自分の読解力が足りず、申し訳ないのですが、scriptのsrc属性にはデータURIスキームを指定してはいけないのいうことで良いのですか?

HTML の規格上は認められているのですが、IE が対応してない。
どんなブラウザでも動くようにしたければ、当面(IE10?、11?で対応されるまで)は使えないです。


うぃんどさんのコメント
schemeの件は出そうか出すまいか悩んだのですが、結局書きませんでした。 HTML4.01より先だったとは私の記憶など曖昧で書かなくてよかった…。 さて本題のほうですが、 下記冒頭の The scriptはscriptタグのことでsrc属性のことではないです。その続きを読んでもらえばわかるはずです。 HTML5.xのほうはinlineかURLをsrc属性に書けるという文になっていますので、あわせて再確認よろしくです。 >HTML4.01 での記述はここ。 >The script may be defined within the contents of the SCRIPT element or in an external file.

a-kuma3さんのコメント
>> 下記冒頭の The scriptはscriptタグのことでsrc属性のことではないです。その続きを読んでもらえばわかるはずです。 << 違います。 「The script」は、スクリプトそのものを指していて、その後の「SCRIPT element」がスクリプトタグを指してます(わざわざ大文字にして)。 >> The script may be defined within the contents of the SCRIPT element or in an external file. << 「スクリプトタグ (SCRIPT element) のコンテンツで」と「外部ファイル (an external file) で」が並列。 で、「an external file」ってなんやねんが「Attribute definitions」で書かれている >> src = uri [CT] This attribute specifies the location of an external script. << src 属性で指定される URI だと。 >> HTML5.xのほうはinlineかURLをsrc属性に書けるという文になっていますので、... << というのは、以下の分から始まるブロックを指しているのでしょうか。 >> When used to include dynamic scripts, the scripts may either be embedded inline or may be imported from an external file using the src attribute. << 正直、何度も読んでいるうちに、よく分からなくなってきました。ぼくの解釈では、using the src attribute は、may be imported にかかってるので、be embedded inline は src 属性のことではない(HTML4.01 で contents と表記されていたもの)と思ってます。 >> the scripts may either be embedded inline or may be imported from an external file using the src attribute. << その後も、「inline」という表現は src 属性にスクリプトのコードを埋め込むことではなく、SCRIPT タグの中身 (contents) を指して使われます(4.3.1 の When the user agent is required to execute a script block, it must run the following steps: の If the load was successful とか、4.3.1.3 とか)。 src 属性については、先のブロックの3ブロック後に、以下のように書かれています。 >> The src attribute, if specified, gives the address of the external script resource to use. The value of the attribute must be a valid non-empty URL potentially surrounded by spaces identifying a script resource of the type given by the type attribute, << 「valid non-empty URL」じゃないと駄目だって。 src 属性に埋め込みのコードは書けません。 # ドキドキ (^^;

うぃんどさんのコメント
私の翻訳ミスが多くてお手数かけて申し訳ないです。 脳裏に「src属性には外部スクリプトのURIを書く」と言うものがあって、 それを証明する箇所を探すのにやっきになっていたようです。 >> 「The script」は、スクリプトそのものを指していて、その後の「SCRIPT element」がスクリプトタグを指してます << おっしゃるとおりで5.xのほうも読み直すと同じような流れになっているようです。 >> src 属性に埋め込みのコードは書けません << 詳細に説明していただいたところ短く返信するのは心苦しいのですが、 結局のところ…HTML5.xになってもHTML的には×ということになりますね。 勝手にまとめなおさせてもらうと、 「HTMLの勧告には単にURIを示すものという表記だけが存在して、 data URI schemeの存在によって質問文のような表記は認められる (ただし実際のサポートはブラウザの実装による)」でしょうか…。

a-kuma3さんのコメント
質問の補足について、追記しました >Hiroto さん こういう機会でもないと、規格って真剣に読まなかったりするので、つい熱が入っちゃいました (・ω<

Hirotoさんのコメント
補足への返信ありがとうございます。 本当に読解力不足です、すいません…。 htmlの規格ではデータURIスキームは認められているのですね。 また、自分の環境にIE10があるのですが、しっかり動かないようでした。 また機会があればよろしくお願いします。

a-kuma3さんのコメント
>> 本当に読解力不足です、すいません…。 << いや、分かるように書いてないぼくが悪い m(_ _)m script タグの src 属性に関してだけ言えば、script タグの中身にコードを書いているのと機能的には何の違いも無く、サイズ制限がある分、利用する局面が思いつかないので、IE では実装されなくても不思議ではないです。 画像に対する data URI scheme だとリクエストの回数が減るかもしれない、というメリットはありますが、こちらもブラウザのキャッシュが効くことを考えると、性能的なメリットは(あまり)無いかな、と思います。

質問者から

お二方とも、回答ありがとうございます。

えーっと、自分の読解力が足りず、申し訳ないのですが、scriptのsrc属性にはデータURIスキームを指定してはいけないのいうことで良いのですか?


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ