如何使用子窗口上下文执行在父窗口中定义的函数

时间:2012-07-13 10:12:31

标签: javascript

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

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

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

很容易调用父窗口的功能:

    top.LibraryMethod();

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

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

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

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

因此,问题是如何从子窗口中声明的函数访问子窗口对象,如果从子窗口调用此函数,而不引入其他函数参数。

1 个答案:

答案 0 :(得分:1)

  

因此,问题是如何从子窗口中声明的函数访问子窗口对象,如果从子窗口调用此函数,而不引入其他函数参数。

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