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

How to execute functions defined in parent window with child window context

本文关键字:窗口 定义 函数 执行 何使用 上下文      更新时间:2023-09-26

我有两个窗口:parent和child(html页面和iframe)。

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

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

调用父窗口的函数很容易,如下所示:

    top.LibraryMethod();

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

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

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

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

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

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

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