【问题标题】:Run JQuery in the context of another frame在另一个框架的上下文中运行 JQuery
【发布时间】:2009-02-12 00:25:57
【问题描述】:

我正在使用的客户有这样的框架集......

<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 中,但在其他框架的上下文中执行。我怎样才能做到这一点?希望这是有道理的。

谢谢 话单

【问题讨论】:

    标签: jquery html frames


    【解决方案1】:

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

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

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

    【讨论】:

    • 好答案 - 我正要问一个类似的问题!
    • 也可以将window.parent.frames[0].document部分写成window.parent.theFrame.document,这样更详细。
    【解决方案2】:

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

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

    或者,更好的是,创建一条捷径:

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

    【讨论】:

      【解决方案3】:

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

      parent.theFrame.someProperty = someValue;
      

      例如:

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

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

      parent.theFrame.block();
      

      或者也许:

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

      【讨论】:

        【解决方案4】:

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

        旧版本(

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

        1.7 及更高版本:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多