0

我有两个窗口:父窗口和子窗口(html 页面和 iframe)。

我有一个脚本库加载到父窗口。

我想从子窗口重用这个库而不将相同的脚本加载到子窗口中。

像这样调用父窗口的函数很容易:

    top.LibraryMethod();

但是这里有一个问题:LibraryMethod 将与父窗口的执行上下文一起执行。这意味着脚本中使用的全局变量将从父窗口而不是子窗口收集。例如,如果 LibraryMethod 声明如下:

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

它将显示从父窗口或子窗口调用的相同值,但我需要在此处访问子窗口的文档。

有一个明显的解决方案 - 将子窗口作为函数参数传递,但这需要更改库代码,这是不可接受的。

所以,问题是如何从父窗口中声明的函数访问子窗口对象,如果这个函数是从子窗口调用的,而不引入额外的函数参数。

4

1 回答 1

1

所以,问题是如何从父窗口中声明的函数访问子窗口对象,如果这个函数是从子窗口调用的,而不引入额外的函数参数。

你不能。您要么必须传入函数参数,要么必须控制在父窗口中加载库函数的上下文(即使您这样做,第二个选项也是狡猾的)。如果您没有这些东西,则无法更改全局变量在父窗口函数中的解析方式。这两件事都需要更改库的脚本文件(我假设它位于单独的脚本文件中,而不仅仅是script标签中的内联内容)。

于 2012-07-13T10:17:17.663 回答