`
zengshaotao
  • 浏览: 807293 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

页面frame相互引用

 
阅读更多

框架编程概述

一个HTML页面可以有一个或多个子框架,这些子框架以<iframe>来标记,用来显示一个独立的HTML页面。这里所讲的框架编程包括框架的自我控制以及框架之间的互相访问,例如从一个框架中引用另一个框架中的JavaScript变量、调用其他框架内的函数、控制另一个框架中表单的行为等。

框架间的互相引用

一个页面中的所有框架以集合的形式作为window对象的属性提供,例如:window.frames就表示该页面内所有框架的集合,这和表单对象、链接对象、图片对象等是类似的,不同的是,这些集合是document的属性。因此,要引用一个子框架,可以使用如下语法: window.frames["frameName"]; window.frames.frameName window.frames[index] 其中,window字样也可以用self代替或省略,假设frameName为页面中第一个框架,则以下的写法是等价的: self.frames["frameName"] self.frames[0] frames[0] frameName 每个框架都对应一个HTML页面,所以这个框架也是一个独立的浏览器窗口,它具有窗口的所有性质,所谓对框架的引用也就是对window对象的引用。有了这个window对象,就可以很方便地对其中的页面进行操作,例如使用window.document对象向页面写入数据、使用window.location属性来改变框架内的页面等。下面分别介绍不同层次框架间的互相引用:

1.父框架到子框架的引用 知道了上述原理,从父框架引用子框架变的非常容易,即: window.frames["frameName"]; 这样就引用了页面内名为frameName的子框架。如果要引用子框架内的子框架,根据引用的框架实际就是window对象的性质,可以这样实现: window.frames["frameName"].frames["frameName2"]; 这样就引用到了二级子框架,以此类推,可以实现多层框架的引用。

 2.子框架到父框架的引用 每个window对象都有一个parent属性,表示它的父框架。如果该框架已经是顶层框架,则window.parent还表示该框架本身。

3.兄弟框架间的引用 如果两个框架同为一个框架的子框架,它们称为兄弟框架,可以通过父框架来实现互相引用,例如一个页面包括2个子框架: <frameset rows="50%,50%">      <frame src="1.html" name="frame1" />      <frame src="2.html" name="frame2" /> </frameset> 在frame1中可以使用如下语句来引用frame2: self.parent.frames["frame2"];

4.不同层次框架间的互相引用 框架的层次是针对顶层框架而言的。当层次不同时,只要知道自己所在的层次以及另一个框架所在的层次和名字,利用框架引用的window对象性质,可以很容易地实现互相访问,例如: self.parent.frames["childName"].frames["targetFrameName"];

 5.对顶层框架的引用 和parent属性类似,window对象还有一个top属性。它表示对顶层框架的引用,这可以用来判断一个框架自身是否为顶层框架,例如: //判断本框架是否为顶层框架 if(self==top){        //dosomething }

 

 改变框架的载入页面 对框架的引用就是对window对象的引用,利用window对象的location属性,可以改变框架的导航,例如: window.frames[0].location="1.html"; 这就将页面中第一个框架的页面重定向到1.html,利用这个性质,甚至可以使用一条链接来更新多个框架。 <frameset rows="50%,50%">      <frame src="1.html" name="frame1" />      <frame src="2.html" name="frame2" /> </frameset> <!--somecode--> <a href="frame1.location='3.html;frame2.location='4.html'" onclick="">link</a> <!--somecode-->

 引用其他框架内的JavaScript变量和函数

在介绍引用其他框架内JavaScript变量和函数的技术之前,先来看以下代码: <script language="JavaScript" type="text/javascript"> <!-- function hello(){       alert("hello,ajax!"); } window.hello(); //--> </script> 如果运行了这段代码,会弹出“hello,ajax!”的窗口,这正是执行hello()函数的结果。那为什么hello()变成了window对象的方法呢?因为在一个页面内定义的所有全局变量和全局函数都是作为window对象的成员。例如: var a=1; alert(window.a); 就会弹出对话框显示为1。同样的原理,在不同框架之间共享变量和函数,就是要通过window对象来调用。例如:一个商品浏览页面由两个子框架组成,左侧表示商品分类的链接;当用户单击分类链接时,右侧显示相应的商品列表;用户可以单击商品旁的【购买】链接将商品加入购物车。在这个例子中,可以利用左侧导航页面来存储用户希望购买的商品,因为当用户单击导航链接时,变化的是另外一个页面,即商品展示页面,而导航页面本身是不变的,因此其中的JavaScript变量不会丢失,可以用来存储全局数据。其实现原理如下:假设左侧页面为link.html,右侧页面为show.html,页面结构如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> New Document </title> </head> <frameset cols="20%,80%">       <frame src="link.html" name="link" />       <frame src="show.html" name="show" /> </frameset> </html> 在show.html中展示的商品旁边可以加入这样一条语句: <a href="void(0)" onclick="self.parent.link.addToOrders(32068)">加入购物车</a> 其中link表示导航框架,在link.html页面中定义了arrOrders数组来存储商品的id,函数addToOrders()用来响应商品旁边【购买】链接的单击事件,它接收的参数id表示商品的id,例子中是一个id为32068的商品: <script language="JavaScript" type="text/javascript"> <!-- var arrOrders=new Array(); function addToOrders(id){       arrOrders.push(id); } //--> </script> 这样,在结帐页面或是购物车浏览页面就可以用arrOrders来获取所有准备购买的商品。框架可以使一个页面划分为功能独立的多个模块,每个模块之间彼此独立,但又可以通过window对象的引用来建立联系,是Web开发中的一个重要机制。在Ajax开发中,还可以利用隐藏框架实现各种技巧,在后面介绍Ajax实例编程时可以发现,无刷新上传文件以及解决Ajax的前进后退问题都会用到这种技术

分享到:
评论

相关推荐

    javascript框架相互引用

    ### JavaScript框架相互引用详解 #### 一、框架与Window对象的关系 在JavaScript中,每一个框架(通常指的是`iframe`)都是一个独立的浏览器窗口。因此,对于任何框架来说,其本质都是一个`window`对象。这意呸着...

    frame 的 parent 是谁?

    只有当所有框架共享相同的源(即他们加载的页面来自同一个域名和端口)时,它们才能相互操作。 随着Web开发技术的发展,HTML5引入了`&lt;iframe&gt;`元素作为`&lt;frame&gt;`的替代,`&lt;iframe&gt;`具有更灵活的使用方式,同时也...

    iframe兄弟页面相互调用

    1. **使用`window.parent`和`window.frames`:** `window.parent`引用的是包含当前`iframe`的父窗口,而`window.frames`是一个数组,包含了当前页面所有`iframe`的引用。通过这两个属性,我们可以访问到其他`iframe`...

    一个宿主页面当中嵌入2个XAML页面并互相调用

    接下来,我们要实现这两个子页面之间的相互调用。在Silverlight中,这通常通过事件和公共方法来完成。例如,我们可以为Page1添加一个按钮,当点击该按钮时,调用Page2的一个方法。 在Page1.xaml的代码后面(Page1....

    js函数在frame中的相互调用详解

    框架间的互相引用一个页面中的所有框架以集合的形式作为window对象的属性提供,例如:window.frames就表示该页面内所有框架的集合,这和表单对象、链接对象、图片对象等是类似的,不同的是,这些集合是document的...

    关于Iframe父页面与子页面之间的相互调用

    父页面可以通过`getElementById`获取特定Iframe的引用,然后在其`onload`事件中调用子页面的方法,如`iframe2.contentWindow.b();`。同时,子页面(如iframe2.html)可以调用父页面的方法,如`parent.test2();`。 ...

    wpf相互调用传递参数

    总结来说,WPF中的相互调用和参数传递可以通过命令行参数、命名管道、WCF服务等多种方式进行。选择哪种方法取决于你的具体需求,例如数据的复杂性、性能要求和安全性等因素。在设计时,应考虑到可扩展性和维护性,...

    JavaScript iframe的相互操作浅析

    在给定的示例中,我们有三个页面:父页面MainForm.aspx和两个子页面FrameA.aspx、FrameB.aspx。MainForm.aspx包含了两个iframe,分别加载了FrameA.aspx和FrameB.aspx。我们可以通过JavaScript来实现这些页面间的交互...

    javascript学习随笔(使用window和frame)的技巧

    **`frame`的交互**:`frame`之间可以相互通信,比如一个`frame`可以改变另一个`frame`的内容。这通常通过`window.parent`和`window.top`属性来实现,`parent`指的是直接包含当前`frame`的`frame`,而`top`则是最外层...

    WPF中Window与Page相互调用示例

    6. **命令:** 使用ICommand接口和 RelayCommand 类型,Window和Page可以通过命令来触发操作,这样可以在不直接引用对方的情况下实现交互。 7. **资源字典:** 共享样式、模板和数据资源,可以将它们定义在...

    aps.net,Javascript 客户端, 服务端相互调用的代码

    SignalR基于WebSocket,支持长轮询、Forever Frame等多种回话保持技术。 6. **跨域问题**: 当JavaScript尝试从不同的源(域名、端口或协议)调用服务器端时,会触发浏览器的同源策略限制。为了解决这个问题,ASP...

    使用iframe+postMessage实现页面跨域通信的示例代码

    通常情况下,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机时,这两个脚本才能相互通信。...otherWindow:其他页面的引用,例如,iframe的c

    好看的frameset实例

    每个`&lt;frame&gt;` 标签定义了一个独立的浏览区域,`src` 属性指定要加载的网页地址,`name` 属性为框架命名,方便其他页面引用。 4. **`noresize` 属性:** 可以在`&lt;frame&gt;` 标签上添加 `noresize` 属性,禁止用户...

    MVVMLight 框架 Page

    此外,MVVMLight还提供了`Messenger`服务,它是一种简单的消息传递机制,允许不同组件之间相互通信,即使它们没有直接的引用关系。这对于解耦组件和实现模块化设计非常有用。 总之,MVVMLight框架为C#开发者提供了...

    frameSet的使用

    框架可以通过`name`属性相互引用,比如在`&lt;a&gt;`链接中使用`target`属性指向某个框架的`name`,使链接在指定框架内打开: ```html &lt;a href="new_page.html" target="frame_name"&gt;点击在指定框架打开 ``` 四、`...

    WKWebView下iOS与JS相互调用

    let webView = WKWebView(frame: .zero) webView.uiDelegate = self webView.navigationDelegate = self ``` 接着,加载HTML内容,可以通过`load`方法加载URL、HTML字符串或请求对象: ```swift let url = URL...

    iframe 跨域

    在Web开发中,`iframe`(Inline Frame)是一种嵌入其他HTML文档的元素,常用于在页面中展示第三方内容或实现页面的分层结构。然而,由于浏览器的同源策略限制,当`iframe`加载的页面与包含它的父页面不在同一个域时...

    wpf 不同窗口传参 传参新程序

    创建一个公共的依赖属性,然后在不同的窗口中引用它来传递参数。 2. **事件(Events)** 可以通过自定义事件或使用已有的如`Closing`、`Loaded`等事件来传递数据。当一个窗口关闭或加载时,可以触发事件并附带参数...

    交大AIC的Html课件11

    4. **框架间的相互操作**:通过`&lt;frame&gt;`标签的`name`属性定义窗口标识,然后在链接的`target`属性中引用该标识,可以控制点击链接时在哪个框架中打开新页面。例如: - `_self`:在当前框架中打开链接。 - `_blank...

Global site tag (gtag.js) - Google Analytics