スライド

Navigatorの拡張の例:ウィンドウを開かずに、代わりにタブで開く

Webページ中のwindow.open()は、二種類の方法で制御しています。一つ目は、ページ読み込み時に元々のwindow.open()メソッドを上書きし、ウィンドウを開く操作そのものを乗っ取るもの。もう一つは、開かれたNavigatorウィンドウから、既存のウィンドウでタブを開いて、代わりにすぐにそのウィンドウ自身を閉じるものです。

onloadのようなイベントやユーザーの操作をトリガーにして実行されるwindow.open()は前者の方法で制御できますが、ページ読み込み中に同時に実行される分については、メソッドを上書きするまで制御することができません。後者の方法は、このときのフェイルセーフとして実装したものです。