39

私が一緒に働いているクライアントは、そのようなフレームセットを持っています...

<frameset rows="100,*, 0">
  <frame name="theFrame" id="theFrame" src="blah.html" >
  <frame name="theSecondFrame" id="theSecondFrame" src="foo.html" >
  <frame name="importantFrame" id="importantFrame" src="myFrame.html" >
</frameset>

特定のアクションが発生すると、フレーム (現在非表示になっている重要なフレーム) がページをほとんど引き継ぎ、他のフレームとのやり取りをブロックする必要があります。jquery ブロック UI プラグインを使用して相互作用をブロックすることを計画しています。

問題は、実際には foo.html または blah.html ファイルを変更できないことです。したがって、JS コードはそこに存在できません。私がする必要があるのは、これらのフレームのコンテキストで jquery コードを実行することです。要約すると、私の JQuery コードは myFrame.html に存在する必要がありますが、他のフレームのコンテキストで実行されます。どうやってやるの?それが理にかなっていることを願っています。

ありがとうCDR

4

4 に答える 4

81

jQueryより一般的に呼び出す関数は、コンテキスト$と呼ばれる 2 番目の引数を取ります。これは、「jQuery オブジェクトのどの DOM 要素で検索を行うべきか」です。ほとんどの場合、この引数は省略されるため、コンテキストはデフォルトで現在の HTML ドキュメントになります。コードが iframe で実行されている場合、ドキュメントはデフォルトでその iframe のドキュメントになります。ただし、他のフレームの 1 つのドキュメントを簡単に取得できます。

たとえば、これを に入れるmyFrame.htmlと、その中のフレームからすべての h1 要素が削除blah.htmlされます。の 2 番目の引数に注意してください$。これは、重要なフレーム内から何とかフレームを取得する式です。

<html>
  <head>
    <script type="text/javascript" src="/javascripts/jquery.js"></script>
    <script type="text/javascript">
      function doIt() {
        $('h1', window.parent.frames[0].document).remove()
      }
    </script>
  </head>
  <body>
    <h1>My Frame</h1>
    <a href="#" onclick="doIt()">Do It</a>
  </body>
</html>
于 2009-02-20T15:30:37.590 に答える
4

pjb3 が言ったように、jQuery コンテキストを設定します。ネストされたフレームがある場合、コードは次のようになります。

$('*',window.parent.frames[0].frames[0].document).size();

または、さらに良いことに、ショートカットを作成します。

targetFrame = window.parent.frames[0].frames[0].document;
$('*',targetFrame).size();
于 2009-09-22T23:27:34.340 に答える
0

jQuery >=1.7 のバージョンでは、古い方法でイベントを取得することはできません

古いバージョン (<1.7):

var events = $('#form').data('events');

1.7 以降:

var events = $.fn.data($('#form'), 'events');
于 2012-01-09T09:28:13.947 に答える
0

ブロック プラグインについてはよくわかりませんが、関連するフレームを取得して、次のような「フレーム ツリー」を使用して操作することはできませんか: (importantFrame.htm 内から)

parent.theFrame.someProperty = someValue;

例えば:

parent.theFrame.location.href='anotherPage.html';

私が読んでいることから、ターゲットページでJqueryが必要になるかもしれませんが、次のようなものを試すことができます:

parent.theFrame.block();

または多分:

$('#theFrame').block();
于 2009-02-14T00:45:26.013 に答える