JavaScript 프레임워크 사용하기
창 개체에 대해 이야기할 때 프레임 내의 웹 페이지도 창 개체, 즉 프레임 개체도 창 개체라고 언급했습니다. 가장 이해하기 쉬운 용어로 말하면, 각 HTML 파일은 프레임을 정의하는 웹 페이지("프레임 웹 페이지")를 포함하여 창 개체를 차지합니다. IE에서는 "d5ba1642137c3f32f4f4493ae923989c" 태그를 사용하여 문서에 삽입된 프레임도 창 개체이지만 "include web page" 메서드를 사용합니다(HTML에서는 "d4374c7be326d262f29a312ca28ca4a0의 "name" 속성과 동일합니다.
window.frameName을 사용하여 지정된 창 개체가 프레임 웹 페이지이기도 하면 해당 프레임을 참조하는 방법은 window.frameName.subFrameName입니다. 등.
"창" 개체가 참조되는 위치에 관계없이 "현재" 창 개체가 반환된다는 점에 유의해야 합니다. 다른 창 객체에 접근하려면 parent 및 top 속성을 사용해야 합니다. parent는 현재 창 개체를 포함하는 프레임 웹 페이지인 "부모" 창 개체를 나타냅니다. top은 창 상단에 있는 창 개체를 나타냅니다.
프레임워크를 사용할 때는 JavaScript에 정의된 전역 변수와 맞춤 함수에도 세심한 주의를 기울여야 합니다. 그들은 모두 자신이 속한 창 개체에 속합니다. 다른 프레임워크에서 전역 변수나 사용자 정의 함수를 참조하려면 "Window object.Frame object [.Frame object...].Global 변수 또는 사용자 정의 함수"라는 귀찮은 방법을 사용해야 합니다.
위의 문제는 연결을 설정할 때 종종 무시됩니다. 기본 대상 창이 93f0f5c25f18dab9d176bd4f6de5d30e(4a48a61d5ed15a2d6bb68dc6f7d2f6b3), 17ebadec66ce05ad66f2056cf0c1dfa8, 입력한 JavaScript 문이 기본 대상 창에서 실행된다는 것을 알아야 하며, 필요한 경우 "parent" 및 "top" 속성을 추가해야 합니다.
프레임 프로그래밍 개요
HTML 페이지에는 d5ba1642137c3f32f4f4493ae923989c로 표시되고 독립적인 HTML 페이지를 표시하는 데 사용되는 하나 이상의 하위 프레임이 있을 수 있습니다. 여기서 논의되는 프레임워크 프로그래밍에는 프레임워크의 자체 제어와 프레임워크 간 상호 액세스가 포함됩니다. 예를 들어 한 프레임워크에서 다른 프레임워크의 JavaScript 변수를 참조하고, 다른 프레임워크에서 함수를 호출하고, 다른 프레임워크에서 양식 동작을 제어하는 등이 있습니다.
프레임 간 상호 참조
페이지의 모든 프레임은 창 개체의 속성으로 컬렉션 형식으로 제공됩니다. 예: window.frames는 페이지의 모든 프레임 컬렉션을 나타냅니다. 양식 객체, 링크 객체, 그림 객체 등과 동일합니다. 유사하지만 차이점은 이러한 컬렉션이 문서의 속성이라는 것입니다. 따라서 서브프레임을 참조하려면 다음 구문을 사용할 수 있습니다.
window.frames["frameName"]; window.frames.frameName window.frames[index]
그 중 window라는 단어를 self로 바꾸거나 생략할 수도 있습니다. 페이지, 다음 쓰기 방법은 동일합니다:
self.frames["frameName"] self.frames[0] frames[0] frameName
각 프레임은 HTML 페이지에 해당하므로 이 프레임은 창의 모든 속성을 갖는 독립적인 브라우저 창이기도 합니다. 소위 프레임에 대한 참조, 즉 창 개체에 대한 참조입니다. 이 창 개체를 사용하면 window.document 개체를 사용하여 페이지에 데이터를 쓰거나 window.location 속성을 사용하여 프레임의 페이지를 변경하는 등 페이지를 쉽게 조작할 수 있습니다.
다음은 다양한 수준의 프레임워크 간의 상호 참조를 소개합니다.
1. 상위 프레임에서 하위 프레임으로 참조
위의 원리를 알면 상위 프레임에서 하위 프레임을 참조하는 것은 매우 쉽습니다. 즉,
window.frames["frameName"];
이렇게 하면 프레임 이름 페이지에서 참조됩니다. 서브프레임 내에서 서브프레임을 참조하려는 경우 실제로는 창 객체인 참조 프레임의 특성에 따라 다음과 같이 구현할 수 있습니다.
window.frames["frameName"].frames["frameName2"];
이런 방식으로, 두 번째 수준 서브프레임이 참조되는 등 다층 프레임워크에 대한 참조가 구현될 수 있습니다.
2. 하위 프레임에서 상위 프레임으로의 참조
각 창 객체에는 상위 프레임을 나타내는 상위 속성이 있습니다. 프레임이 이미 최상위 프레임인 경우 window.parent는 프레임 자체도 나타냅니다.
3. 형제 프레임 간 참조
두 프레임이 동일한 프레임의 하위 프레임인 경우 상위 프레임을 통해 서로 참조할 수 있습니다. 예를 들어 페이지에는 2개의 하위 프레임이 포함됩니다. 🎜>
<frameset rows="50%,50%"> <frame src="1.html" /> <frame src="2.html" /> </frameset>
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" /> <frame src="2.html" /> </frameset> link
引用其他框架内的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" /> <frame src="show.html" /> </frameset> </html>
在show.html中展示的商品旁边可以加入这样一条语句:
c1ba1ea4878f2b42a964bd1212cd44d8加入购物车5db79b134e9f6b82c0b36e0489ee08ed
其中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的前进后退问题都会用到这种技术。