Document.open()

Document.open() メソッドは、書き込みのために文書を開きます。

これはいくらかの副作用を招きます。例を挙げます。

  • 文書、文書内のノード、文書のウィンドウに現在登録されているイベントリスナーがすべて除去されます。
  • すべての既存のノードが文書から除去されます。

構文

document.open();

引数

なし。

返値

Document オブジェクトインスタンスです。

以下の簡単なコードは、文書を開き、その内容をいくつかの異なる HTML の断片に置き換えてから、再び閉じます。

document.open(); 
document.write("<p>Hello world!</p>");
document.write("<p>I am a fish</p>");
document.write("<p>The number is 42</p>"); 
document.close();

ページが読み込まれたあとで document.write() が呼び出されると、自動的に document.open() が呼び出されます。

Firefox や Internet Explorer では何年も前から、すべてのノードの削除に加えて、 JavaScript の変数なども追加で消去していました。今はそうではありません。document non-spec'ed parameters to document.open

Gecko 固有のメモ

Gecko 1.9 以降、このメソッドは他のプロパティと同一オリジンポリシーが同じになるようになり、文書のオリジンを変更しようとした場合に動作しません。

Gecko 1.9.2 以降、 document.open()プリンシパルをスタックからフェッチするのではなく、 URI を使用する文書のプリンシパルを使用します。その結果、 wrappedJSObject を使用しても、 document.write()クロームからの信頼できない文書に呼び出すことはできません。考え方についてはセキュリティチェックの基本を参照してください。

引数3つの document.open()

あまり知られていませんが、あまり使われていない引数3つ版の document.open() があり、これは Window.open() のエイリアスです (詳細はそのページを参照してください)。

この呼び出しは、例えば github.com を新しいウィンドウで開き、オープナーは null に設定してみます。

document.open('https://www.github.com','', 'noopener=true')

引数2つの document.open()

ブラウザーは以下の形で、引数2つの document.open() に対応してきました。

document.open(type, replace)

type は書き込もうとしているデータの MIME タイプ (text/html など) を指定し、 replace が設定されていれば (すなわち "replace" の文字列)、新しい文書の履歴エントリが書き込まれている文書の現在の履歴エントリを置き換えることを指定していました。

この形式は現在では廃止されています。エラーは発生せず、代わりに document.open() に転送されます (つまり、引数なしで実行した場合と同等です)。 履歴の置換動作は常に行われるようになりました。

仕様書

仕様書 状態 備考
HTML Living Standard
document.open() の定義
現行の標準
Document Object Model (DOM) Level 2 HTML Specification
document.open() の定義
廃止された

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
openChrome 完全対応 45
補足
完全対応 45
補足
補足 Before Chrome 64, this method was accessed through the HTMLDocument alias.
Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 ≤12.1Safari 完全対応 1WebView Android 完全対応 45
補足
完全対応 45
補足
補足 Before Chrome 64, this method was accessed through the HTMLDocument alias.
Chrome Android 完全対応 45
補足
完全対応 45
補足
補足 Before Chrome 64, this method was accessed through the HTMLDocument alias.
Firefox Android 完全対応 4Opera Android 完全対応 ≤12.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 5.0
補足
完全対応 5.0
補足
補足 Before Samsung Internet 9.0, this method was accessed through the HTMLDocument alias.

凡例

完全対応  
完全対応
実装ノートを参照してください。
実装ノートを参照してください。

See also