8 BOM
9696 ワード
本章の内容理解 コントロールウィンドウ、フレームワーク、ポップアップウィンドウ は、 を利用する.は、 を理解する.
8.1 windowオブジェクト
8.1.1グローバルスコープ
グローバルスコープ内で宣言されたすべての変数は、関数が
ページにフレームが含まれている場合は、各フレームは
8.1.3ウィンドウの位置
8.1.5ナビゲーションとウィンドウを開くポップアップウィンドウが、第二のパラメータがすでに存在しているウィンドウまたはフレームでない場合、この方法は、第三のパラメータ位置に入ってきた文字列に基づいて新しいウィンドウまたは新しいタブページを作成する.3番目のパラメータが入力されていない場合は、すべてのデフォルト設定のブラウザウィンドウを開きます.新しいウィンドウを開けないと、3番目のパラメータは無視されます.3番目のパラメータはカンマ区切りの設定文字列で、新しいウィンドウにそれらの特性が表示されることを示します. セキュリティ機構 ポップアップウィンドウシールド
タイムアウトコールは、
8.1.7システムダイアログ
ブラウザは、
8.2 locationオブジェクト
8.2.1クエリ文字列パラメータ
クエリー文字列を解析するために次のように関数を作成し、すべてのパラメータを含むオブジェクトを返します.
8.3ナビゲートオブジェクト
クライアントブラウザを識別するための事実上の基準となっています.
8.3.1検出プラグイン
非IEブラウザでは、 name:プラグインの名前. description:プラグインの説明. filename:プラグインのファイル名. length:プラグインによって処理されるMIMEタイプの数. IEのプラグインを検出するのは面倒くさいです.IEにおいてプラグインを検出する唯一の方法は、特有の
8.4 screenオブジェクト
8.5 history対象
ブラウザオブジェクトモデルは、は、フレームワークを使用する際に、各フレームに独自の には、親の枠を含む他のフレームを参照するためのウィンドウポインタがあります. は、 呼び出し
window
オブジェクト-BOMのコアlocation
オブジェクトにおけるページ情報navigator
オブジェクトを使用してブラウザ8.1 windowオブジェクト
BOM
のコアオブジェクトは、ブラウザの一例を示すwindow
である.ブラウザでは、window
オブジェクトには二重の役割があり、JavaScript
を介してブラウザウィンドウにアクセスするインターフェースであり、ECMAScriptで規定されているGlobal
オブジェクトでもある.これは、ウェブページで定義されたいずれかのオブジェクト、変数および関数が、window
を対象としていることを意味し、Global
などの方法にアクセスする権利がある.8.1.1グローバルスコープ
グローバルスコープ内で宣言されたすべての変数は、関数が
parseInt()
オブジェクトの属性および方法になる.大域変数がwindow
オブジェクトの属性になるかどうかはともかく、大域変数とwindow
オブジェクト上で属性を直接定義するかどうかは少し違っています.大域変数はwindow
オペレータによって削除できず、delete
オブジェクト上で直接定義された属性でも大丈夫です.また、宣言されていない変数にアクセスしようとするとエラーが発生しますが、window
オブジェクトを照会することにより、宣言されていない可能性のある変数が存在するかどうかを知ることができます.// , `oldValue`
var newValue = oldValue;
// ,
//newValue undefined
var newValue = window.oldValue;
8.1.2ウィンドウ関係とフレームワークページにフレームが含まれている場合は、各フレームは
window
オブジェクトを有し、window
セットに保存される.frames
のセットでは、対応するframes
オブジェクトには、数値インデックスまたはフレーム名を介してアクセスすることができる.各window
オブジェクトは、フレーム名を含むwindow
属性を有する.name
オブジェクトは常に最高(最外)層のフレームを指す.つまりブラウザウィンドウです.フレーム内で他のフレームに正しくアクセスできるようにします.一つのフレームで作成された任意のコードについては、top
オブジェクトは、トップフレームではなく、そのフレームの特定のインスタンスを指すからである.8.1.3ウィンドウの位置
var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;
8.1.4ウィンドウサイズwindow
およびouterWidth
は、ブラウザウィンドウ自体のサイズに戻る.一方、outerHeight
およびinnerWidth
は、コンテナ内のページビュー領域のサイズ(枠幅を減算)を表している.innerHeight
およびdocument.documentElement.clientWidth
.document.documentElement.clientHeight
およびdocument.body.clientWidth
.8.1.5ナビゲーションとウィンドウを開く
document.body.clientHeight
方法を使用すると、特定のURLにナビゲーションすることもできるし、新しいブラウザウィンドウを開くこともできる.この方法は、4つのパラメータを受信することができます.ローディングするURL、ウィンドウターゲット、特性文字列、およびブラウザ履歴において現在ローディングされているページのブール値を新しいページに置き換えますか?通常は最初のパラメータを渡すだけで、最後のパラメータは新しいウィンドウを開けない場合にのみ使用されます.第二のパラメータが渡され、かつ、パラメータが既存のウィンドウまたはフレームの名前である場合、その名前を持つウィンドウまたはフレームには、最初のパラメータで指定されたURLがロードされます.//
window.open("http://www.wrox.com/", "topFrame");
「topFrame」というウィンドウまたはフレームがあれば、このURLはこのウィンドウまたはフレームにロードされます.そうしないと新しいウィンドウが作成され、「topFrame」と名づけられます.また、2番目のパラメータは、以下のいずれかの特殊なウィンドウ名であってもよい.self、_parent、_topまたは_blankwindow.open("http://www.wrox.com/","wroxWindow", "height=400,width=400,top=0,left=10,resizable=yes");
window.open()
方法は、新しいウィンドウへの参照を返す.参照の対象は他のwindow.open()
オブジェクトとほぼ同じであるが、これをより多く制御することができる.var wroxWin = window.open("http://wrox.com/","wroxWindow");
wroxWin.resizeTo(500,500);
wroxWin.moveTo(100,100);
wroxWin.close();
var wrox = window.open("http://www.wrox.com", "_blank");
if(wroxWin == null) {
alert("The popup was blocked!");
}
ブラウザ拡張または他のプログラムによって阻止されるポップアップウィンドウである場合、window
は通常、エラーを投げかける.var blocked = false;
try {
var wrox = window.open("http://www.wrox.com", "_blank");
if (wroxWin == null) {
blocked = true;
}
}catch (ex) {
blocked = true;
}
if (blocked) {
alert("The popup was blocked!");
}
8.1.6間欠呼び出しとタイムアウト呼び出しタイムアウトコールは、
window.open()
オブジェクトのwindow
方法を使用する必要があります.実行するコードとミリ秒で表される時間、すなわちコードを実行する前に何ミリ秒待つべきかという二つのパラメータを受け入れることができます.ここで、最初のパラメータはJavaScriptコードを含む文字列であっても良いし、関数であっても良い.//
setTimeout("alert("Hello world!")", 1000);
//
setTimeout(function(){alert("hello world!")}, 1000);
二つ目のパラメータはJavaScriptにどれぐらいの時間が過ぎたら現在のタスクを列に追加するかを教えます.列が空であれば、追加コードはすぐ実行されます.そうでなければ、前のコードの実行が完了したら実行します.setTimeout()
を呼び出した後、方法はタイムアウトコールを表す数値IDを返します.このタイムアウトコールIDは実行予定コードの一意識別子であり、タイムアウトコールをキャンセルすることができる.var timeoutId = setTimeout(function () {alert("hello world!");}, 1000);
//
clearTimeout(timeoutId);
間欠呼び出しはタイムアウト呼び出しと同様ですが、間欠呼び出しがキャンセルされるか、またはページがアンインストールされるまで、指定された時間間隔でコードを繰り返します.setInterval(function(){alert("hello world!");}, 1000);
var intervalId = ...
clearInterval(intervalId);
タイムアウトを使用して間欠呼び出しをシミュレートするのは最適なモードであり、後者の間欠呼び出しは前の間欠呼び出しが終了する前に起動する可能性があるためである.ですから、間欠コールは使わないほうがいいです.8.1.7システムダイアログ
ブラウザは、
setTimeout()
、alert()
、confirm()
方法により、システムダイアログを呼び出してユーザにメッセージを表示することができる.システムダイアログは、ブラウザに表示されているウェブページとは関係なく、HTMLも含まれていません.それらの外観は、CSSによって決定されるのではなく、オペレーティングシステムおよびブラウザ設定によって決定される.さらに、これらの方法によって開かれるダイアログは、同期およびモードです.つまり、これらのダイアログが表示されるとコードは停止されますが、これらのダイアログをオフにするとコードは再開されます.ユーザがOKをクリックしたかそれともキャンセルしたかを確認するために、prompt()
方法で戻ったブール値を確認することができます.if (confirm("are you okay?")) {
alert("haha!");
} else {
alert("eee!");
}
confirm()
方法は、テキストの入力をユーザに促す「ヒント」ボックスを生成する.この方法は、ユーザにテキストヒントとテキスト入力フィールドのデフォルト値を表示する2つのパラメータを受け入れる.ユーザーがOKボタンをクリックした場合、prompt()
はテキスト入力ボックスの値を返します.そうでない場合はprompt()
に戻る.8.2 locationオブジェクト
null
オブジェクトはlocation
オブジェクトの属性であり、window
オブジェクトの属性でもある.言い換えれば、document
およびwindow.location
は、同じオブジェクトを参照している.8.2.1クエリ文字列パラメータ
クエリー文字列を解析するために次のように関数を作成し、すべてのパラメータを含むオブジェクトを返します.
function getQueryStringArgs () {
//
var qs = (location.search.length > 0 ? location.search.substring(1) : "");
//
var args = {};
//
var items = qs.lenth ? qs.split("&") : [];
var item = null;
var name = null;
var value = null;
var i = 0;
var len = items.length;
for (i = 0; i < len; i++) {
item = items[i].split("=");
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
}
return args;
}
8.2.2位置操作location.assign("http://www.wrox.com");
location.href = "http://www.wrox.com";
...
document.location
方法を使用すると、ユーザは前のページに戻ることができません.location.reload(); // ( )
location.reload(true); // ( )
コードの最後の行にreplace()
を置いたほうがいいです.8.3ナビゲートオブジェクト
クライアントブラウザを識別するための事実上の基準となっています.
8.3.1検出プラグイン
非IEブラウザでは、
reload
配列を使用してこの目的を達成することができる.この配列の各項目には以下の属性が含まれています.plugins
タイプを使用して、特定のプラグインを作成することを試みることである.特定のプラグインをチェックするには、そのCOM識別子が必要です.function hasIEPlugin (name) {
try {
new ActiveXObject(name);
return true;
} catch (ex) {
return false;
}
}
// Flash
alert(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));
// QuickTime
alert(hasIEPlugin("QuickTime.QuickTime"));
// QuickTime
function hasQuickTime() {
var result = hasPlugin("QuickTime");
if(!result) {
result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
}
}
8.3.2登録処理プログラム8.4 screenオブジェクト
8.5 history対象
ActiveXObject
はhistory
オブジェクトの属性であり、したがって、各ブラウザウィンドウ、ラベルページ、および各フレームは、自分のwindow
オブジェクトが特定のhistory
オブジェクトに関連している.window
方法を使用して、ユーザの履歴に任意にジャンプでき、後ろにも前にも進むことができる.この方法は、後方または前方にジャンプするページ数の整数値を表すパラメータを受け付けます.負の値は後ろにジャンプし、正の値は反対です.//
history.go(-1);
//
history.go(1);
//
history.go(2);
go()
方法に文字列パラメータを伝えることもでき、このときブラウザは履歴に文字列を含む最初の位置にジャンプします.履歴に文字列が含まれていない場合、この方法は何もしません.// wrox.com
history.go("wrox.com");
// nczonline.net
history.go("nczonline.net");
go()
の代わりにback()
およびforward()
が使用されてもよい.//
history.back();
//
history.forward();
もう一つのgo()
属性があります.履歴の数が保存されています.if (history.length == 0) {
//
}
8.6まとめブラウザオブジェクトモデルは、
length
オブジェクトを頼りに、ブラウザウィンドウおよびページ可視領域を表しています.一方、window
オブジェクトまたはECMAScriptのwindow
オブジェクトは、すべての大域変数および関数がその属性であり、すべてのオリジナルのコンストラクタおよび他の関数もその名前空間に存在する.Global
オブジェクトと、すべてのオリジナルのコンストラクタおよび他の関数のコピーを有する.各フレームはwindow
セットに保存されており、位置または名前によってアクセスできます.frames
オブジェクトは常に最も周辺のフレーム、つまりブラウザウィンドウ全体を指す.top
オブジェクトは現在のフレームを含むフレームを表し、parent
オブジェクトはself
を指す.window
オブジェクトを使用して、プログラム的にブラウザのナビゲーションシステムにアクセスすることができる.対応する属性を設定すると、ブラウザのURLはセグメントごとまたは全体的に変更できます.location
方法は、ブラウザ履歴に現在表示されているページをURLに置き換えながら、新しいURLにナビゲーションすることができる.replace()
オブジェクトは、ブラウザに関する情報を提供する.どのような情報を提供するかは、ユーザのブラウザによって大きく異なります.しかし、いくつかの共通の属性はすべてのブラウザに存在します.