3

我有一个包含 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

4 回答 4

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);
于 2012-07-13T18:32:38.913 回答
1

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

替换: 替换为function save() { ... }this.save = function() { ... }

替换: 替换为var aVariable = "value";this.aVariable = "value";

然后在您的 iframe 中,您需要将范围设置thisparent

this = parent;

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

this.save();
alert(this.aVariable);
于 2012-07-13T15:28:06.537 回答
0

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

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

跨域通信

祝你好运

于 2012-07-13T15:27:50.127 回答
0

我想您可以将documentor传递window给 save 函数来操作上下文。


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

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

然后:

parent.save(document);

或者接受窗口作为参数:

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

接着:

parent.save(self);
于 2012-07-13T18:14:53.943 回答