• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HTML id名とjavascript変数名)

HTML id名とjavascript変数名について

このQ&Aのポイント
  • HTMLのid名とJavaScriptの変数名について質問です。
  • 特定のブラウザでHTMLのid名がグローバル変数として認識され、alertが表示される現象が起きました。
  • id名と同じ名前の変数を宣言した場合、自動的にグローバル変数として扱われるのでしょうか?

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

  • ベストアンサー
回答No.1

<form name="form1"> としておくと、document.form1と書けるようになるのと同じような物で、 JScriptというIE用のJavaScript互換言語仕様です。 他にも、document.all.testという書き方ができます。 Opera、Safari、ChromeはJScriptの多くの部分をサポートしていますので、id属性を付与したHTML要素はidがグローバル変数として使えるようになっています。 Firefoxは何かの設定(about:configだった気がします)を変更することで、この機能を使えるようになると思います(記憶があやふやです)。 HTML5 WebAPIで標準仕様に定めようと言う動きもありますが、反対意見もあるため、今後標準化されるかはわかりません。 標準化されなくてもFirefoxがサポートするようになれば、メジャーなすべてのブラウザで使える独自規格となります。 すべてのブラウザで使えるから問題無しとするか、標準仕様だけを使うべきとするかは、制作者の考え方次第だと思います。 (HTML-DOMを使用してdocument.getElementById('test')とするのが、すべてのブラウザで使用できる標準規格です。) ちなみに、consoleは標準ではありません。。。なかったと思います。

poyon8989
質問者

お礼

ご回答ありがとうございます。最近firefoxからchromeに変えた為、いままでまったく気付きませんでした!結構衝撃です。ありがとうございました。

その他の回答 (1)

  • Chaire
  • ベストアンサー率60% (79/130)
回答No.2

以下に Window オブジェクトの定義がありますが、 http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#the-window-object interface Window : EventTarget {  ....  getter WindowProxy (unsigned long index);  getter object (DOMString name);  .... }; 長々と書かれている中で、上の部分が「window に名前を問い合わせたとき、その名前を持つオブジェクトを返す」の定義部分です。具体的には、その name 属性値を持つ iframe、a、area、form、img など、またはその id 属性値を持つ要素です。 これはもともと、ASP とコードを共有しやすくするための IE の独自仕様でした。ですが、パッケージないし名前空間の仕組みのない JavaScript では、スクリプトのグローバル空間に名前をまき散らすことになります(だから、ECMAScript 4 の策定時に名前空間機能を巡っても喧々諤々の議論になりました)。 HTML Standard で、昔のスクリプトを動かすために上記の定義が追加されました。もし気になるのなら、id 属性値や名前属性値を id="foo-bar" のようにハイフン区切りにでもしておけば、少なくとも window.foo-bar として参照されることはなくなります。window['foo-bar'] ではアクセスできてしまうでしょうけどね。 --- To No.1: 誤解していらっしゃると思うのですが、『標準仕様だけを使うべき』なんて主張する人は見たことがありませんよ。 例えば、以下の図を見て頂きたいのですが、 http://edward.oconnor.cx/2009/05/what-the-web-platform-is Web Platform を構成するものとして「Platform APIs」、つまり各ブラウザの独自拡張も含まれています。そもそも、DOM 適合要件は DOM の拡張を許しています。 なら、独自拡張の何がマズいのかと言えば、将来的に安定して使える保証がない、ということです。将来に渡って使われうる基幹部分には安定しているものを使い、ブラウザごとに異なる部分にはブラウザの独自拡張で埋める。 つまり、仕様の性質と、使い所の問題です。標準かどうかなんて宗教的な話ではありません。

poyon8989
質問者

お礼

ご回答ありがとうございます。あまり仕様書的なものなど確認したことがなかったのでもっと先勉強していきたいと思います。しかし結構衝撃でした。。。ありがとうございました。

関連するQ&A