基本的BOM體系結構圖javascript
BOM提供了一些訪問窗口對象的一些方法,咱們能夠用它來移動窗口位置,改變窗口大小,打開新窗口和關閉窗口,彈出對話框,進行導航以及獲取客戶的一些信息如:瀏覽器品牌版本,屏幕分辨率。但BOM最強大的功能是它提供了一個訪問HTML頁面的一入口——document對象,以使得咱們能夠經過這個入口來使用DOM的強大功能!!!java
window對象是BOM的頂層(核心)對象,全部對象都是經過它延伸出來的,也能夠稱爲window的子對象。因爲window是頂層對象,所以調用它的子對象時能夠不顯示的指明window對象,例以下面兩行代碼是同樣的:編程
document.write("BOM"); window.document.write("BOM");
window -- window對象是BOM中全部對象的核心。window對象表示整個瀏覽器窗口,但沒必要表示其中包含的內容。此外,window還可用於移動或調整它表示的瀏覽器的大小,或者對它產生其餘影響。瀏覽器
JavaScript中的任何一個全局函數或變量都是window的屬性緩存
window子對象服務器
window對象關係屬性cookie
window對象定位屬性app
window.open方法語法框架
window.open(url, name, features, replace);
open方法參數說明編程語言
open函數features參數說明,若是不使用第三個參數,將打開一個新的普通窗口
參數名稱 | 類型 | 說明 |
---|---|---|
height | Number | 設置窗體的高度,不能小於100 |
left | Number | 說明建立窗體的左座標,不能爲負值 |
location | Boolean | 窗體是否顯示地址欄,默認值爲no |
resizable | Boolean | 窗體是否容許經過拖動邊線調整大小,默認值爲no |
scrollbars | Boolean | 窗體中內部超出窗口可視範圍時是否容許拖動,默認值爲no |
toolbar | Boolean | 窗體是否顯示工具欄,默認值爲no |
top | Number | 說明建立窗體的上座標,不能爲負值 |
status | Boolean | 窗體是否顯示狀態欄,默認值爲no |
width | Number | 建立窗體的寬度,不能小於100 |
特性字符串中的每一個特性使用逗號分隔,每一個特性之間不容許有空格
open方法返回值爲一個新窗體的window對象的引用
setTimeout與setInterval方法有兩個參數,第一個參數能夠爲字符串形式的代碼,也能夠是函數引用,第二個參數爲間隔毫秒數,它們的返回是一個可用於對應clear方法的數字ID
var tid = setTimeout("alert('1')",1000); alert(tid); clearTimeout(tid);
History 對象的屬性:length 返回瀏覽器歷史列表中的 URL 數量
History 對象的方法
Location 對象的屬性
Location 對象的方法
Navigator 對象的屬性
只有自身和使用window.open方法打開的窗口和才能被JavaScript訪問,window.open方法打開的窗口經過window.opener屬性來訪問父窗口。 而在opener窗口中,能夠經過window.open方法的返回值來訪問打開的窗口!
window.frames集合:在框架集或包含iframe標籤的頁面中,frames集合包含了對有框架中窗口的引用
alert(frames.length);//框架的數目 alert(frames[0].document.body.innerHTML);//使用下標直接獲取對框架中窗口的引用 //不但可使用下標,還可使用frame標籤的name屬性 alert(frames["frame1"].document.title);
在框架集中還可使用ID來獲取子窗口的引用
var frame1 =document.getElementById("frame1");//這樣只是獲取了標籤 var frame1Win = frame1.contentWindow;//frame對象的contentWindow包含了窗口的引用 //還能夠直接獲取框架中document的引用 var frameDoc = frame1.contentDocument; alert(frameDoc);//但IE不支持contentDocument屬性
市場上的瀏覽器種類多的不可勝數,它們的解釋引擎各不相同,期待全部瀏覽器都一致的支持JavaScript,CSS,DOM,那要等到不知何時,然而開發者不能幹等着那天。歷史上已經有很多方法來解決瀏覽器兼容問題了,主要分爲兩種:1.userAgent字符串檢測,2.對象檢測;固然,也不能考慮全部的瀏覽器,咱們須要按照客戶需求來,若是能夠確信瀏覽網站的用戶都使用或大部分使用IE瀏覽器,那麼你大可放心的使用IE專有的那些豐富的擴展,固然,一旦用戶開始轉向另外一個瀏覽,那麼痛苦的日子便開始了。下面是市場上的主流瀏覽器列表:
注意,瀏覽器老是不斷更新,咱們不但要爲多種瀏覽器做兼容處理,還要對同一瀏覽器多個版本做兼容處理。好比IE瀏覽器,其6.0版本和7.0版本都很流行,由於微軟IE隨着操做系統綁定安裝(以前也是同步發行,微軟平均每兩年推出一款我的桌面,一樣IE也每兩年更新一次;直到如今,因爲火狐的流行,IE工做組才加快IE的更新),因此更新的較慢,6.0版和7.0版有很大差異。
市場上還存在一些其它瀏覽器,但因爲它們都是使用的上面所列瀏覽器的核心,或與上面瀏覽器使用了相同的解釋引擎,因此無需多做考慮。下面是主流的瀏覽器解釋引擎列表:
Trident (又稱爲MSHTML),是微軟的窗口操做系統(Windows)搭載的網頁瀏覽器—Internet Explorer的排版引擎的名稱,它的第一個版本隨着1997年10月Internet Explorer第四版釋出,以後不斷的加入新的技術並隨着新版本的Internet Explorer釋出。在將來最新的Internet Explorer第七版中,微軟將對Trident排版引擎作了的重大的變更,除了加入新的技術以外,並增長對網頁標準的支持。儘管這些變更已經在至關大的程度上落後了其它的排版引擎。使用該引擎的主要瀏覽器:IE,TheWorld,MiniIE,Maxthon,騰訊TT瀏覽器。事實上,這些瀏覽器是直接使用了IE核心,由於其userAgent字符串中返回的信息與IE是如出一轍的!
壁虎,英文爲"Gecko"。Gecko是由Mozilla基金會開發的佈局引擎的名字。它本來叫做NGLayout。Gecko的做用是讀取諸如HTML、CSS、XUL和JavaScript等的網頁內容,並呈現到用戶屏幕或打印出來。Gecko已經被許多應用程序所使用,包括若干瀏覽器,例如Firefox、Mozilla Suite、Camino,Seamonkey等等
Presto是一個由Opera Software開發的瀏覽器排版引擎,供Opera 7.0及以上使用。Presto取代了舊版Opera 4至6版本使用的Elektra排版引擎,包括加入動態功能,例如網頁或其部分可隨着DOM及Script語法的事件而從新排版。Presto在推出後不斷有更新版本推出,使很多錯誤得以修正,以及閱讀Javascript效能得以最佳化,併成爲速度最快的引擎。
是HTML網頁排版引擎之一,由KDE所開發。KDE系統自KDE2版起,在檔案及網頁瀏覽器使用了KHTML引擎。該引擎以C++編程語言所寫,並以LGPL受權,支援大多數網頁瀏覽標準。因爲微軟的Internet Explorer的佔有率至關高,很多以FrontPage製做的網頁均包含只有IE才能讀取的非標準語法,爲了使KHTML引擎可呈現的網頁達到最多,部分IE專屬的語法也一併支援。目前使用KHTML的瀏覽器有Safari和Google Chrome。而KHTML也產生了許多衍生品,如:WebKit,WebCore引擎
下面是各大瀏覽器使用彈窗顯示的userAgent字符串
IE瀏覽器:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
火狐瀏覽器:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
Opera瀏覽器:Opera/9.64 (Windows NT 5.1; U; Edition IBIS; zh-cn) Presto/2.1.1
Safari瀏覽器:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16
Google Chrome瀏覽器:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5
可使用下面的代碼進行瀏覽器檢測
var Browser = { isIE:navigator.userAgent.indexOf("MSIE")!=-1, isFF:navigator.userAgent.indexOf("Firefox")!=-1, isOpera:navigator.userAgent.indexOf("Opera")!=-1, isSafari:navigator.userAgent.indexOf("Safari")!=-1 };
但這樣作並非萬無一失的,一個特例即是Opera可使用userAgent假裝本身。下面是假裝成IE的userAgent:Mozilla/5.0 (Windows NT 5.1; U; Edition IBIS; zh-cn; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.64;在徹底假裝的狀況下,最後的「Opera 9.64」這個字符串也不會出現,但Opera也有特殊的識別自身的方法,它會自動聲明一個opera全局變量!
不但如此,咱們的檢測還忽略了一點,就是那些使用相同引擎而品牌不一樣的瀏覽器,因此,直接檢測瀏覽器是沒有必要的,檢測瀏覽器的解釋引擎纔是有必要的!
var Browser = { isIE:navigator.userAgent.indexOf("MSIE")>-1 && !window.opera, isGecko:navigator.userAgent.indexOf("Gecko")>-1 && !window.opera && navigator.userAgent.indexOf("KHTML") ==-1, isKHTML:navigator.userAgent.indexOf("KHTML")>-1, isOpera:navigator.userAgent.indexOf("Opera")>-1 };