アプリ版:「スタンプのみでお礼する」機能のリリースについて

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>test</title>
<script type="text/javascript">
window.onload = function() {
console.log('test' in window);
test.addEventListener('click', function() { alert('click') }, false);
};
</script>
</head>
<body>
<div id="test">test</div>
</body>
</html>

何かすごい勘違いをしていたらお恥ずかしいのですが、

上のコードFIREFOX以外(IE、Chrome、safari)'true'でtestをクリックするとalertが

出るのですが、これって自動的にid名がグローバル変数になってるって

ことなのでしょうか??

id名と同じ名前で変数を宣言していて、ぶち当たりました。

どうぞよろしくお願いいたします。

A 回答 (2件)

<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は標準ではありません。。。なかったと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/03/28 23:47

以下に Window オブジェクトの定義がありますが、


http://www.whatwg.org/specs/web-apps/current-wor …

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-pl …

Web Platform を構成するものとして「Platform APIs」、つまり各ブラウザの独自拡張も含まれています。そもそも、DOM 適合要件は DOM の拡張を許しています。

なら、独自拡張の何がマズいのかと言えば、将来的に安定して使える保証がない、ということです。将来に渡って使われうる基幹部分には安定しているものを使い、ブラウザごとに異なる部分にはブラウザの独自拡張で埋める。

つまり、仕様の性質と、使い所の問題です。標準かどうかなんて宗教的な話ではありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/03/29 00:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!