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 block UI 插件来阻止交互。

问题是我实际上无法更改 foo.html 或 blah.html 文件。所以JS代码不能在那里。我需要做的是在这些框架的上下文中执行我的 jquery 代码。回顾一下,我需要我的 JQuery 代码存在于 myFrame.html 中,但在其他框架的上下文中执行。我怎样才能做到这一点?希望这是有道理的。

感谢 CDR

4

4 回答 4

81

jQuery函数通常使用 调用$,它接受第二个参数 context,即“我应该在 jQuery 对象的哪个 DOM 元素中进行搜索”。大多数情况下,您会忽略此参数,因此上下文默认为当前 HTML 文档。当您的代码在 iframe 中执行时,文档默认为该 iframe 的文档。但是您可以轻松地获取其他框架之一的文档。

例如,将其放入 中myFrame.html,这将删除包含在其中的框架中的所有 h1 元素blah.html。注意 的第二个参数$,它是从重要帧中抓取 blah 帧的表达式:

<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 回答