框架编程概述一个HTML页面可以有一个或多个子框架,这些子框架以< iframe> 来标记,用来显示一个独立的HTML页面。这里所讲的框架编程包括框架的自我控制以及框架之间的互相访问,例如从一个框架中引用另一个框架中的JavaScript变量、调用其他框架内的函数、控制另一个框架中表单的行为等。 框架间的互相引用一个页面中的所有框架以集合的形式作为window对象的属性提供,例如:window.frames就表示该页面内所有框架的集合,这和表单对象、链接对象、图片对象等是类似的,不同的是,这些集合是document的属性。因此,要引用一个子框架,可以使用如下语法:window.frames["frameName"];window.frames.frameNamewindow.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'" οnclick=""> 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)" οnclick="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开发中的一个重要机制。

转载于:https://www.cnblogs.com/ToTS0FTWARE/p/3457034.html

javascript frame框架间函数变量的相互引用 frame间相互传值相关推荐

  1. HTML教程-各窗口间相互操作(Frame Target)

    文章来源: 山西之窗 由Frames分出来的几个窗口的内容并不是静止不变的,往往一个窗口的内容随着另一个窗口的要求而不断变化,这就提高了Frames的利用价值.为了完成各窗口之间的相互操作,我们必须为 ...

  2. 理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...

  3. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  4. JavaScript中的预解析(变量提升)介绍!

    今天小千为大家介绍一下JavaScript中的预解析(变量提升).从什么是预解析及变量的预解析和函数的预解析及加载流程进行学习(注意:我们这里说的ES5中的预解析). 什么是解析 首先代码执行肯定需要 ...

  5. 【JavaScript】理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...

  6. 好程序员技术教程分享JavaScript运动框架

    好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下. JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程.如让div的width属性由200px变到400 ...

  7. JavaScript中的回调函数(callback)

    前言 callback,大家都知道是回调函数的意思.如果让你举些callback的例子,我相信你可以举出一堆.但callback的概念你知道吗?你自己在实际应用中能不能合理利用回调实现功能? 我们在平 ...

  8. PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method

    最终实例在下方 以前用过cakephp, 他们的数据库查询还是蛮强大的, 后来好奇它的类的写法,比如: <?php $this->Post->findByTitle('My Firs ...

  9. Javascript(二)——函数(重载、回调)与作用域(附图解)

    文章目录 一.函数 1.1函数的本质 1.2创建函数 1) 声明方式 function 2) 赋值方式 3)new创建--几乎不用 4)ES5-create()方法 1.2 递归 1.3 重载函数 1 ...

最新文章

  1. 数据库的三大范式和事物
  2. 用jar命令将Web应用打包成war文件的简单方法
  3. wireshark抓包分析tcp连接与断开
  4. CodeForces - 1055C Lucky Days(数论)
  5. 团队作业—系统设计和任务分配
  6. 7-1 装载问题 (10 分)(思路+详解)
  7. 希捷宣布出货双碟装1TB硬盘 单碟500GB上市
  8. workbench提示工作负载高度不平衡_功率因数负载组
  9. 预告 | 4月22日,CVPR 2021论文分享会详细介绍,学术新星云集!
  10. skills --札记
  11. python秒网课_利用python完成大学刷课(从0到完成的思路)
  12. xp系统怎么关闭wmi服务器,WinXP系统如何启用WMI服务,小编教你WinXP系统如何启用WMI服务...
  13. 三元运算符语法格式php,php中三元运算符用法详解
  14. qmake 添加额外参数 分开编译
  15. cad提取边界命令_cad如何提取文本的轮廓线
  16. 大一下暑假留校训练记录
  17. 【YBT2023寒假Day3 C】樱桃莓莓(凸包)(线段树)
  18. DNS服务器可能不可用
  19. 系统架构演变:SOA、微服务架构的区别和联系
  20. 三层交换机原理及配置

热门文章

  1. 缓冲区,粘包,解决粘包的方法,
  2. JQuery基本获取值的方式
  3. 将Spring源码转换为工程 + 导入Eclipse时缺失jar包
  4. linux中sleep详解实例
  5. nhibernate连接11g数据库
  6. Android学习点点滴滴之获取正在运行的进程
  7. 由HEAP Corruption DETECTED查到的
  8. 模板模式(Template)
  9. Nodejs学习笔记(六)——Mysql模块
  10. Nodejs学习笔记(二)——模块