16

我有一个页面,其中包含一些 js 和 jQuery 代码,并且运行良好。但不幸的是,我所有的网站都非常旧,并且使用框架。因此,当我将页面加载到框架内时,$(document).ready()不会启动。

我的框架集如下所示:

<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize> 
    <frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0">
    <frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">      
</frameset>

我的页面已加载到main框架中。我应该怎么办?

4

12 回答 12

8

我尝试了另一条评论中提到的方法:

$("#frameName").ready(function() {
    // Write you frame on load javascript code here
} );

它对我不起作用。

这做到了:

$("#frameName").load( function() {
     //code goes here
} );

即使事件不会很快触发 - 它也会等到图像和 css 也加载完毕。

于 2010-06-17T18:11:56.073 回答
3

我知道这是一个老话题。但是为了帮助一些到达此页面的人,这是我的解决方案:

$($("#frameName")[0].contentWindow.document).ready(function() {
    // Write you frame onready code here
});
于 2012-07-04T05:36:22.077 回答
2

我认为这是我在 iframe 中使用 DOMContentLoaded 时遇到的类似问题。

我写了一篇关于它的博客文章

于 2009-01-28T19:13:51.053 回答
2

如果要onload为帧触发事件,请按照下列步骤操作:

  1. 为每个标签分配一个id和。确保两者和属性值相同。name<frame>idname

  2. 使用以下代码触发onload框架事件:

    $("frameName").ready(function() { 
      // Write your frame onload code here
    }
    
于 2008-11-27T07:39:26.520 回答
2

以下内容也对我有用:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
$(window.parent.frames[0].document).ready(function() {
    // Do stuff
});
</script>

[0] 表示它是文档中的第一帧,[1] 表示第二帧,依此类推。如果您无法控制标记,这将特别好,并且它仍在使用准备好的文档。

于 2012-01-31T15:23:10.840 回答
1

您是否尝试将 jQuery 代码放在 Info.aspx 页面中?

于 2008-10-21T10:30:22.963 回答
1

我在这篇文章上工作了很长时间......这是我的解决方案。

测试.html

<!DOCTYPE HTML>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>

    <script>        
      document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>');

      $('#frame_content').attr('src', 'test2.html');
      $('#frame_content').load(function()
      {
        if('${"#header"}' != '') {
          $("#header", frame_content.document).remove();
        }
      });
      if($('#frame_content').complete) $('#frame_content').trigger("load");
    </script>

</head>
</html>

test2.html

<!DOCTYPE HTML>
<html>

  <head>
  </head>

  <body>
    <div id="header">You will never see me, cause I have been removed!</div>
  </body>
</html>
于 2012-06-08T06:12:20.577 回答
0

不知道你想做什么,但我有一个更老的经典 asp 应用程序,它在框架外运行,我最近刚刚添加了 jQuery 功能,它工作得很好。$(document).ready() 可以在一个框架内正常工作,但是如果您希望在另一个框架中引用 DOM,则必须使用 Frame 的 onload 事件来让您知道框架的 DOM 何时加载。诚然,我使用了 iFrame,但概念应该是相同的。

于 2008-10-22T02:57:08.603 回答
0

我不知道这是否是最好的解决方案,但是当我移除$(document).ready()并保留它的身体时,一切都完美无缺。

于 2008-10-21T10:50:31.973 回答
0

无需修改标记。只需修复选择器。它应该是:

$("frame[name='main']").ready(function(){..}); 

不是

$("#frameName").ready(function(){..}); 

注意:似乎 jQuery 就绪事件会触发多次。确保你的逻辑没问题。

于 2014-11-26T03:21:02.753 回答
0

这个答案可能会迟到,但这个回复可能会帮助像我这样的人......

这可以通过本机 Javascript 代码完成 -

ifrm2 = var ifrm2 = document.getElementById('frm2');
if (ifrm2.contentDocument.readyState == 'complete') {
  //here goes the code after frame fully loaded
}

 //id = frm2 is the id of iframe in my page
于 2016-02-28T09:40:23.003 回答
-2

没有理由$(document).ready()不被召唤。确保您的页面包含包含到jquery.js. 尝试用一个空的 HTML 页面做一个简单的测试,然后发出一个警报,看看是否还有其他问题。

如果您尝试在包含框架定义的 HTML 页面中使用它,请记住那里没有文档,您必须使用

于 2008-10-21T09:03:58.427 回答