我有一个带有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中的。这不应该向应用程序服务器发出另一个请求。
答案 0 :(得分:1)
在您的parent.js文件中,每个函数和变量前面都有this.
,然后您就可以利用Javascript Closures。
替换:function save() { ... }
使用:this.save = function() { ... }
替换:var aVariable = "value";
使用:this.aVariable = "value";
然后在您的iframe中,您需要将this
的范围设置为parent
:
this = parent
;
您对parent.js中的函数或变量的所有调用(在全局javascript或iframe javascript中)都将如下所示:
this.save();
alert(this.aVariable);
答案 1 :(得分:1)
将您的代码封装在一个闭包中的parent.js中:
var loadParentJS = function(window) {
window.save = function() {
// code
};
window.other = function() {
// code
};
// rest of your code...
};
loadParentJS(window);
然后在你的iframe中运行:
parent.loadParentJS(window);
答案 2 :(得分:0)
简短的回答,不,你不能。 IFrame的内容作为单独的网页处理。 更长的答案:你确定需要使用IFrame吗?这是为了什么?你能避免吗? 使用IFrame并不是一件坏事,也许它并没有满足你的需求
您应该阅读一些有关跨域通信的内容。这将让您了解如何在您的网页与其中的IFrame之间进行通信
祝你好运答案 3 :(得分:0)
我猜你可以将document
或window
传递给保存功能来操纵上下文。
例如,接受文档作为参数:
function save(doc) { doc.getObjectById("myform").submit(); }
然后:
parent.save(document);
或接受窗口作为参数:
function save(win) { alert(win.myvariable) }
然后:
parent.save(self);