3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HTML: event処理記述で省略できるっぽいもの

Last updated at Posted at 2024-03-15

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.URLtop.URLwindow.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>

参考記事

iframeを使った手品

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?