htmlのtagに直接event処理を記述すると省略できるものがある。
window
, document
, tagの要素自身を指すobjectである(他にもあるかどうかは不明)。そのため以下のような記述は正常に処理される。
<a onclick="console.log(id,href,title,URL,style)">a</a>
3つのobjectいずれかで共通の属性を持つ場合、参照される優先順位は event起動要素 > document > window となるっぽい。
そんな訳でdocument.titleを参照したい場合はdocumentは省略できない。
<title>0</title><a onclick="console.log(document.title,title)" title=1>a</a>
以下の実験では面白い事が起こる。最初のclickではdocument.URLが参照され、2回目以降はa要素のURLが参照される。
<a onclick="console.log(URL);this.URL=++id">a</a>
優先順位の都合上、以下のような処理は異常停止となる。self.URL
、top.URL
、window.URL
等と記述すべし。
<a onclick="URL.createObjectURL(new Blob([]))">a</a>
以下の場合click連打でa要素が増殖。訳が分からない。当然a要素以外は消滅する。
<a onclick="write(outerHTML)">a</a>
では以下の場合何が起こるか? なんと盛大にerror祭りが開催されます。body要素のonloadでは何も省略できない模様。ついでにthis
が指すものはbody要素ではなくwindow。
ちなみにiframe、img、svg要素のonloadでは省略祭り開催中で、thisが指すものも要素自身となる。
<title>0</title><body onload="console.log(title)" title=t>