ページがフレーム内にあるかどうかの検出を処理するJavaScriptがあります。 top.frames []などを使用しましたが、すべて正常に動作します。
このスクリプトでは、「ウィンドウ」または「自己」を同じ意味で使用でき、すべてが引き続き機能することに気付きました。 HTMLページで使用する場合、「ウィンドウ」は「セルフ」と同じですか?
From Javascript:The Definitive Guide:
Windowオブジェクトは、Webブラウザウィンドウを操作できるようにするいくつかのプロパティとメソッドを定義します。また、Documentオブジェクトの
document
プロパティなど、他の重要なオブジェクトを参照するプロパティも定義します。最後に、Windowオブジェクトには、window
とself
の2つの自己参照プロパティがあります。いずれかのグローバル変数を使用して、Windowオブジェクトを直接参照できます。
つまり、window
とself
はどちらも、クライアント側のJavaScriptのグローバルオブジェクトであるWindowオブジェクトへの参照です。
self
は読み取り専用プロパティであり、window
よりも柔軟性があり、self
を直接使用することもあります。これは、window
の参照が操作コンテキストに応じて変化するためです(self
が存在する場合にのみ存在するwindow.self
とは異なります)。他の人が言及しているように、それは比較にも最適です。
たとえば、Webワーカー(独自のバックグラウンドスレッドに存在する)内でself
を使用する場合、self
は実際にはWorkerGlobalScope.self
を参照します。ただし、通常のブラウザコンテキストでself
を使用する場合、document
は単にWindow.self
(window
、addEventListener()
、およびその他すべてのものを含むもの)への参照を返します。
TL; DR.self
のwindow.self
が存在しない場合は存在しませんが、self
を単独で使用すると、従来のウィンドウ/ブラウザコンテキストのWindow.self
、またはWebワーカーのWorkerGlobalScope.self
を指します。コンテキスト。
いつものように、MDNはこのテーマについて素晴らしい記事を書いています JavaScriptドキュメントで 。 :)
補足:ここでのself
の使用法は、ローカル変数を宣言する一般的なJSパターンと混同しないでください:var self = this
は、切り替え後にコンテキストへの参照を維持します。
詳細については、こちらをご覧ください: JavaScriptでのバインド状況から抜け出す 。
window.self
のMDNページ からの説明と例を次に示します。
if (window.parent.frames[0] != window.self) {
// this window is not the first frame in the list
}
window.selfは、ほとんどの場合、現在のウィンドウが親フレームセットの最初のサブフレームであるかどうかを確認する上記の例のような比較で使用されます。
最近フレームセットを使用している人がいないことを考えると、self
の有用なケースはないと考えても大丈夫だと思います。また、少なくともFirefoxでは、window.self
ではなくwindow
に対してテストすることは同等です。
window
とself
はどちらも、現在のWebページのグローバルオブジェクトを参照します。
詳細については、 http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific をご覧ください。