0

親と子(htmlページとiframe)の2つのウィンドウがあります。

親ウィンドウにロードされたスクリプト ライブラリがあります。

同じスクリプトを子ウィンドウにロードせずに、子ウィンドウからこのライブラリを再利用したい。

次のように、親ウィンドウの関数を簡単に呼び出すことができます。

    top.LibraryMethod();

ただし、ここに問題があります。LibraryMethod は、親ウィンドウの実行コンテキストで実行されます。これは、スクリプトで使用されるグローバル変数が、子ウィンドウではなく親ウィンドウから収集されることを意味します。たとえば、LibraryMethod が次のように宣言されているとします。

    function LibraryMethod(){ alert(document.location.href); }

親ウィンドウまたは子ウィンドウから呼び出された同じ値が表示されますが、ここで子ウィンドウのドキュメントにアクセスする必要があります。

明らかな解決策があります-子ウィンドウを関数パラメーターとして渡しますが、これはライブラリコードを変更するために必要であり、受け入れられません。

したがって、問題は、この関数が子ウィンドウから呼び出された場合、追加の関数パラメーターを導入せずに、親ウィンドウで宣言された関数から子ウィンドウ オブジェクトにアクセスする方法です。

4

1 に答える 1

1

したがって、問題は、この関数が子ウィンドウから呼び出された場合、追加の関数パラメーターを導入せずに、親ウィンドウで宣言された関数から子ウィンドウ オブジェクトにアクセスする方法です。

できません。関数パラメーターを渡す必要があるか、ライブラリ関数が親ウィンドウに読み込まれるコンテキストを制御する必要があります (その 2 番目のオプションは、たとえそうしても危険です)。どちらも持っていない場合、親ウィンドウ関数でグローバルが解決される方法を変更することはできません。どちらの場合も、ライブラリのスクリプト ファイルを変更する必要があります (scriptタグ内のインライン コンテンツだけでなく、別のスクリプト ファイルにあると思います)。

于 2012-07-13T10:17:17.663 に答える