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

时间:2012-07-13 14:51:29

标签: 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到每个创建的iframe中吗?比如

loadParentJS("parent.js");
iframe.js中的

。这不应该向应用程序服务器发出另一个请求。

4 个答案:

答案 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之间进行通信

cross domain communication

祝你好运

答案 3 :(得分:0)

我猜你可以将documentwindow传递给保存功能来操纵上下文。


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

function save(doc) { doc.getObjectById("myform").submit(); }

然后:

parent.save(document);

或接受窗口作为参数:

function save(win) { alert(win.myvariable) }

然后:

parent.save(self);