Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将javascript从父上下文加载到子上下文中_Javascript_Html - Fatal编程技术网

如何将javascript从父上下文加载到子上下文中

如何将javascript从父上下文加载到子上下文中,javascript,html,Javascript,Html,我有一个带有parent.js的HTML页面。在该html中,将在运行时创建一个iFrame。此iframe在其上下文中需要parent.js。 如果我有一个 function save() { ... } 在parent.js中,我可以从iframe.js调用它,如 parent.save(); 但我需要在iframe上下文中调用它,比如 save(); 因此,我在iframe html中再次加载了parent.js。这使得每次我创建新的iframe时都会加载parent.js 我是否可

我有一个带有parent.js的HTML页面。在该html中,将在运行时创建一个iFrame。此iframe在其上下文中需要parent.js。 如果我有一个

function save() { ... }
在parent.js中,我可以从iframe.js调用它,如

parent.save();
但我需要在iframe上下文中调用它,比如

save();
因此,我在iframe html中再次加载了parent.js。这使得每次我创建新的iframe时都会加载parent.js

我是否可以将已经加载的parent.js重用到创建的每个iframe中

loadParentJS("parent.js");

在iframe.js中。这不应向应用服务器发出另一个请求。

简短回答,不,您不能。IFrame的内容作为单独的网页处理。 详细回答:您确定需要使用IFrame吗?这是干什么用的?你能避免吗? 使用IFrame不是一件坏事,只是可能它不能满足您的需求

您应该阅读一些关于跨域通信的内容。这将使您了解如何在网页和其中的IFrame之间进行通信


祝您好运

在parent.js文件中,在每个函数和变量前面加上
这个。
然后您应该能够利用Javascript闭包

替换:
函数save(){…}
With:
this.save=function(){…}

替换:
var aVariable=“value”
使用:
this.aVariable=“value”

然后在iframe中,您需要将
的范围设置为
父项

this=parent

在parent.js中(在全局javascript或iframe javascript中)对函数或变量的所有调用如下所示:

this.save();
alert(this.aVariable);

我想您可以将
文档
窗口
传递给save函数来操作上下文


例如,接受文档作为参数:

function save(doc) { doc.getObjectById("myform").submit(); }
function save(win) { alert(win.myvariable) }
然后:


或接受窗口作为参数:

function save(doc) { doc.getObjectById("myform").submit(); }
function save(win) { alert(win.myvariable) }
然后:

parent.save(self);

将parent.js中的代码封装在一个闭包中:

var loadParentJS = function(window) {
    window.save = function() {
      // code
    };

    window.other = function() {
      // code
    };

  // rest of your code...

};

loadParentJS(window);
然后在iframe中运行以下命令:

parent.loadParentJS(window);

每次在iframe中加载该文件应该不会太成功,因为用户的浏览器将缓存该文件。是的,但是如果该文件缓存在用户的浏览器上,那么它应该只从服务器下载一次。是的,它从缓存中获取js。服务器请求需要大约600毫秒来完成这个过程,因为获取所有js文件需要将近300毫秒。我从Firebugook那里得到了这些数据。您的行“在parent.js中,我可以从iframe.js调用它,比如”似乎不正确。。这是另一种方式吗?就像,-->如果我在parent.js中有一个
函数save(){…}
,我可以从iframe.js调用它,就像
parent.save()。如果这不起作用,那么我可以向您指出一个Javascript模块设计参考。。将parent.js代码封装到一个自动执行的匿名函数中可能需要一些返工。在iframe脚本中,除了一些静态代码外,我不想更改任何内容。这是因为,许多自定义编写的脚本将在iframe级别执行。你在这里提到的封装,我认为@jalbee给出了相同的结果。感谢您的努力。
此。
将提供当前上下文。但是iframe js代码是由这么多人编写的,并且正在更改,这一切都是一团糟。谢谢。这对我有用。在我的例子中,我不想更改iframe中的代码。因此添加
parent.loadParentJS(窗口)正在将父上下文提供给iframe。感谢您的回复,但我没有尝试在此处连接跨域页面,并且父级和iframe之间的通信工作正常。我无法选择更改函数的参数,因为它们是应用程序的标准函数。谢谢你的回复