親と子(htmlページとiframe)の2つのウィンドウがあります。
親ウィンドウにロードされたスクリプト ライブラリがあります。
同じスクリプトを子ウィンドウにロードせずに、子ウィンドウからこのライブラリを再利用したい。
次のように、親ウィンドウの関数を簡単に呼び出すことができます。
top.LibraryMethod();
ただし、ここに問題があります。LibraryMethod は、親ウィンドウの実行コンテキストで実行されます。これは、スクリプトで使用されるグローバル変数が、子ウィンドウではなく親ウィンドウから収集されることを意味します。たとえば、LibraryMethod が次のように宣言されているとします。
function LibraryMethod(){ alert(document.location.href); }
親ウィンドウまたは子ウィンドウから呼び出された同じ値が表示されますが、ここで子ウィンドウのドキュメントにアクセスする必要があります。
明らかな解決策があります-子ウィンドウを関数パラメーターとして渡しますが、これはライブラリコードを変更するために必要であり、受け入れられません。
したがって、問題は、この関数が子ウィンドウから呼び出された場合、追加の関数パラメーターを導入せずに、親ウィンドウで宣言された関数から子ウィンドウ オブジェクトにアクセスする方法です。