在另一个框架的上下文中运行JQuery

时间:2009-02-12 00:25:58

标签: jquery html frames

我正在使用的客户端有一个像这样的框架集......

<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 个答案:

答案 0 :(得分:81)

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

例如,将其放在myFrame.html中,这将删除框架中包含blah.html的所有h1元素。注意$的第二个参数,它是从重要框架中抓取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>

答案 1 :(得分:4)

如pjb3所说,设置jQuery上下文。如果您有嵌套框架,您的代码将如下所示:

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

或者,更好的是,制作一条捷径:

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

答案 2 :(得分:0)

我不确定块插件,但是你不能抓住相关的框架并使用“框架树”来操纵它,如下所示:(来自importantFrame.htm内)

parent.theFrame.someProperty = someValue;

例如:

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

从我一直在阅读的内容中,您可能需要在目标页面上使用Jquery,但您可以尝试以下内容:

parent.theFrame.block();

或者也许:

$('#theFrame').block();

答案 3 :(得分:0)

在jQuery&gt; = 1.7版本中,我们无法以旧方式获取事件

旧版本(&lt; 1.7):

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

1.7及更新版本:

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