如何将javascript从父上下文加载到子上下文中
我有一个带有parent.js的HTML页面。在该html中,将在运行时创建一个iFrame。此iframe在其上下文中需要parent.js。 如果我有一个如何将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 我是否可
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之间的通信工作正常。我无法选择更改函数的参数,因为它们是应用程序的标准函数。谢谢你的回复