百度空间 | 百度首页 
 
查看文章
 
window 和 frame 关系的错误理解及正确使用
2008-08-28 10:24
对 window 和 frame 关系的错误理解是web开发者中普遍存在的问题,从 (x) html 和 Javascrīpt 来看,每个窗口中 显示的 frame 都能很容易的控制,事实上,当一个 window 有多个 frame , 可以通过 window.frames[] 来实现对每 个独立的窗口目标的引用,一些简单却很有用的属性在下表中列举出来:

Window 属性 说明
frames[] 存放当前窗口中所有frame对象的数组。
length 窗口 frame. 的数目,和 window.frames.length 等同。
name 当前窗口的名字,自 Javascrīpt 1.1 起,这个值是可读写的。
parent 对父窗口的引用。
self 对窗口自身的引用。
top 对最高级别窗口的引用,这个值通常和parent一致,除非 frame. 中有更多的 frame。
window 另外一个对当前窗口的引用。


想用 Javascrīpt 控制 frame 最主要的是要把各自的名字和他们之间的关系弄清楚,如果你有一个叫 frames.html 的页面,页面代码如下:

HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>FrameSet Test</title>
  6. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  7. </head>
  8. <frameset rows="33%,*,33%">
  9. <frame src="framerelationship.html" name="frame1" id="frame1" />
  10. <frame src="moreframes.html" name="frame2" id="frame2" />
  11. <frame src="framerelationship.html" name="frame5" id="frame5" />
  12. </frameset>
  13. </html>


在这种情况下,当前文档主体可以看作是三个 frame (frame1,frame2, and frame5) 的 parent ,你可以使用下面的方式取得 frame 数目:
Code:

window.frames.length


你如果在三个子 frame 中运行代码,可以用下面的方法 :
Code:

window.parent.frames.length

或者
Code:

parent.frames.length


parent 表示一个窗体的父窗体,也可以用 top 来表示最高级别的窗体,这样可以写成 top.frames.length ,但是需要注意的是:除非你有嵌套 frame ,否则 parent 和 top 通常表示的是一个对象。

访 问一个 frame ,可以用 name 或者下标的方式查询 frames 数组,parent.frames[0].name 将会输出第一个 frame 的名字,在我们的例子中就是 frame1,同样,我们也可以用 parent.frame1 或者   parent.frames ["frame1"] 来实现相同的操作,记住,一个 frame 就是一个 window,知道这个,就可以使用所有Window 和 Document 的方法。

当理解了 frame 之间的关系,可以很容易的通过 parent.frames[] 操作任何 frame ,假如你有一个简单的框架页面:
HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>Two Frames</title>
  6. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  7. </head>
  8. <frameset cols="300,*">
  9. <frame src="navigation.html" name="frame1" id="frame1" />
  10. <frame src="content.html" name="frame2" id="frame2" />
  11. </frameset>
  12. </html>


在 navigation 窗体里面,你可以通过下面的方式设置一个对 content 窗体引用的变量:
Code:

var contentFrame = parent.frames[1]; // 或者使用名称



iframe 是一个需要注意的 frame 变种,用iframe可以让你不使用框架,但是却可以嵌入页面,问题是,我们如何控制这些 iframe ?事实上,我们也可以用 frames[] 的方法,此外,如果你的 iframe 有命名,可以通过 getElementById 来操控,示例如下:
HTML:
  1. <iframe src="http://www.google.com" name="iframe1" id="iframe1" height="200" width="200"></iframe>
  2. <form action="#" method="get">
  3. <input type="button" value="Load by Frames Array"
  4. onclick="frames['iframe1'].location='http://www.javascrīptref.com';" />
  5. <input type="button" value="Load by DOM"
  6. onclick="document.getElementById('iframe1').src='http://www.pint.com';" />
  7. </form>


可以通过在链接标签里面加上 target 来将操作指向目标 frame :
Code:

<a href="http://www.google.com" target="framename">Google</a>


类别:javascript && web | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu