JavaScriptフレームワークワークまとめ 4657 ワード JavaScript iframe フレームプログラミングの概要一つのHTMLページには、独立したHTMLページを表示するためにというサブフレームがあります。ここでいうフレームプログラミングは、フレームの自己制御とフレーム間の相互アクセスを含み、例えば、別のフレームのJavaScript変数を参照したり、他のフレーム内の関数を呼び出したり、他のフレーム内のフォームの挙動を制御したりする。フレーム間の相互参照一つのページのすべてのフレームは、集合としてwindowオブジェクトの属性として提供されます。例えば、window.frameは、このページ内のすべてのフレームのセットを表します。これはフォームオブジェクト、リンクオブジェクト、ピクチャオブジェクトなどと同様で、これらのセットはdocumentの属性です。したがって、サブフレームを参照するには、次のような文法が使えます。window.frames["frameName"];window.frames.frameNamewindow.frames[index]では、window文字もselfで代替または省略できます。frame Nameがページの最初のフレームであると仮定すると、次のような書き方は等価です。self.frames["frameName"]self.frames[0]frames[0]frameNameの各フレームは一つのHTMLページに対応しています。このフレームも独立したブラウザウィンドウです。フレームに対する引用とは、windowオブジェクトの参照である。このwindowオブジェクトがあれば、その中のページを簡単に操作できます。例えばwindow.documentオブジェクトを使ってページにデータを書き込み、window.location属性を使ってフレーム内のページを変更するなどです。それぞれの階層のフレーム間の相互参照を紹介します。1.親枠からサブフレームへの参照上記の原理を知ると、親フレームからサブフレームを引用することは容易になります。つまり、window.frames["frameName"];は、ページ内名をframe Nameとするサブフレームを引用しました。サブフレーム内のサブフレームを参照するなら、参照のフレームワークによって、実際にはwindowオブジェクトの性質である。これにより、window.frames["frameName"].frames["frameName2"];は、2つのサブフレームに引用され、これに類推して、多層フレームの参照が可能になる。2.サブフレームから親フレームへの参照各windowオブジェクトにはparent属性があり、その親フレームを表しています。このフレームが最上階のフレームであるならば、window.parentはまたフレーム自体を表している。3.兄弟フレーム間の引用2つのフレームが同じフレームのサブフレームである場合、兄弟フレームと称され、相互参照は親フレームで実現され得る。例えば、1つのページは2つのサブフレームを含む。 <frame src="1.html" name="frame1" /> <frame src="2.html" name="frame2" /></frameset>は、frame 1において、次のような文を使用してframe 2: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.にリダイレクトします。この性質を利用して、リンクを使って複数のフレームを更新することもできます。 <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変数と関数を引用する技術を紹介する前に、まず以下のコードを見ます。function hello(){ alert("hello,ajax!");}window.hello();がこのコードを実行したら、「ハロー、ajax!」これはハロー関数を実行した結果です。なぜハローはwindowの対象になったのですか?一つのページで定義されているグローバル変数とグローバル関数はすべてwindowオブジェクトのメンバーです。例えば:var a=1alert(window.a)コード」が表示されます。同じ原理で、変数と関数を異なるフレーム間で共有することは、windowオブジェクトを通じて呼び出すことです。例えば、一つの商品閲覧ページは二つのサブフレームからなり、左側は商品分類のリンクを表します。ユーザーが分類リンクをクリックすると、右側に該当する商品リストが表示されます。ユーザーは商品の隣の【購入】リンクをクリックして商品をカートに入れることができます。この例では、ユーザーがナビゲーションリンクをクリックすると、変化するのは別のページ、すなわち商品展示ページであり、ナビゲーションページ自体は変化しないので、JavaScript変数は失われず、グローバルデータを格納するために使用されてもよい。その実現原理は以下の通りです。左側ページがlink.htmlであり、右ページがshow.htmlであると仮定して、ページ構造は以下の通りです。ショーで展示されている商品の隣には、「a href=「void(0)」onclick=「self.parent.link.addToOrders(32068)」という文があります。ショッピングカートに参加します。ここでlinkはナビゲーションフレームを表しています。arrOrders配列をクリックして商品を格納するidader Tordsを定義します。これは、商品のIDを受信したパラメータです。例えば、idは32068の商品です。<!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>このように、決算ページやショッピングカートの閲覧ページでは、arrOrdersを使ってすべての購入準備商品を取得することができます。フレームワークは、一つのページを機能の独立した複数のモジュールに分割することができ、各モジュール間は独立しているが、windowオブジェクトの参照によってリンクを確立することもでき、Web開発の重要なメカニズムである。Ajax開発においても、隠しフレームを利用して様々な技術を実現することができます。Ajaxインスタンスのプログラミングを紹介すると、アップロードファイルの更新やAjaxの前進・後退問題の解決にもこの技術が使われていることが分かります。 Javascript Websocket使用例紹介(簡明入門教程) JS実現の簡単なAutocomplette自動完成例