3

parent.jsを含むHTMLページが1つあります。そのhtml内で、実行時に1つのiFrameが作成されます。このiframeには、そのコンテキストでparent.jsが必要です。私が持っている場合

function save() { ... }

parent.jsでは、iframe.jsから次のように呼び出すことができます。

parent.save();

しかし、私はそれをiframeコンテキストで呼び出す必要があります。

save();

そのため、iframehtmlにparent.jsを再度ロードしました。これにより、新しいiframeを作成するたびにparent.jsが読み込まれるようになります。

とにかく、作成された各iframeに、すでにロードされているparent.jsを再利用できますか?

loadParentJS("parent.js");

iframe.js内。これにより、アプリケーションサーバーに別のリクエストが送信されることはありません。

4

4 に答える 4

1

parent.jsファイルで、各関数と変数の前にthis.を付けると、Javascriptクロージャを利用できるようになります。

置換:次function save() { ... } のように:this.save = function() { ... }

置換:次var aVariable = "value"; のように:this.aVariable = "value";

this次に、iframeでスコープを次のように設定する必要がありますparent

this = parent;

parent.js(グローバルjavascriptまたはiframe javascript)の関数または変数へのすべての呼び出しは次のようになります。

this.save();
alert(this.aVariable);
于 2012-07-13T15:28:06.537 に答える
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 に答える
0

簡単な答え、できません。IFrameのコンテンツは別のWebページとして処理されます。長い答え:IFrameを使用する必要がありますか?それはなんのためですか?あなたはそれを避けることができますか?IFrameを使用することは悪いことではありませんが、おそらくそれはあなたのニーズを満たしていないでしょう

クロスドメイン通信について少し読む必要があります。これにより、Webページとその中のIFrameの間で通信する方法がわかります。

クロスドメイン通信

幸運を

于 2012-07-13T15:27:50.127 に答える
0

documentまたは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 に答える