W3C:JavaScript Window - 瀏覽器對(duì)象模型

瀏覽器對(duì)象模型 (BOM) 使 JavaScript 有能力與瀏覽器“對(duì)話”稠鼻。
瀏覽器對(duì)象模型(Browser Object Model)尚無(wú)正式標(biāo)準(zhǔn)刃滓。
由于現(xiàn)代瀏覽器已經(jīng)(幾乎)實(shí)現(xiàn)了 JavaScript 交互性方面的相同方法和屬性,因此常被認(rèn)為是 BOM 的方法和屬性欠痴。

Window 對(duì)象

  • 所有瀏覽器都支持 window 對(duì)象迄靠。它表示瀏覽器窗口。
    所有 JavaScript 全局對(duì)象喇辽、函數(shù)以及變量均自動(dòng)成為 window 對(duì)象的成員掌挚。
    全局變量是 window 對(duì)象的屬性。
    全局函數(shù)是 window 對(duì)象的方法菩咨。
    甚至 HTML DOM 的 document 也是 window 對(duì)象的屬性之一:
  • 瀏覽器窗口的高度和寬度:(不包括工具欄/滾動(dòng)條)
var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;

var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

Window Screen

  • window.screen 對(duì)象包含有關(guān)用戶屏幕的信息吠式。
  • window.screen 對(duì)象在編寫(xiě)時(shí)可以不使用 window 這個(gè)前綴。
  • screen.availWidth 屬性返回訪問(wèn)者屏幕的寬度旦委,以像素計(jì)奇徒,減去界面特性,比如窗口任務(wù)欄缨硝。
document.write("可用寬度:" + screen.availWidth);
  • screen.availHeight 屬性返回訪問(wèn)者屏幕的高度摩钙,以像素計(jì),減去界面特性查辩,比如窗口任務(wù)欄胖笛。
document.write("可用高度:" + screen.availHeight);

Window Location

  • window.location 對(duì)象用于獲得當(dāng)前頁(yè)面的地址 (URL)网持,并把瀏覽器重定向到新的頁(yè)面。
  • window.location 對(duì)象在編寫(xiě)時(shí)可不使用window 這個(gè)前綴长踊。
  • 一些例子:
location.hostname   // 返回 web 主機(jī)的域名
location.pathname   // 返回當(dāng)前頁(yè)面的路徑和文件名
location.port       // 返回 web 主機(jī)的端口 (80 或 443)
location.protocol   // 返回所使用的 web 協(xié)議(http:// 或 https://)
location.href       // 返回當(dāng)前頁(yè)面的 URL功舀。
location.assign()   // 加載新的文檔。

Window History

  • window.history 對(duì)象在編寫(xiě)時(shí)可不使用 window 這個(gè)前綴身弊。
    為了保護(hù)用戶隱私辟汰,對(duì) JavaScript 訪問(wèn)該對(duì)象的方法做出了限制。
  • history.back() 方法加載歷史列表中的前一個(gè) URL阱佛。
    這與在瀏覽器中點(diǎn)擊后退按鈕是相同的:
  • history forward() 方法加載歷史列表中的下一個(gè) URL帖汞。
    這與在瀏覽器中點(diǎn)擊前進(jìn)按鈕是相同的:

Window Navigator

  • window.navigator 對(duì)象包含有關(guān)訪問(wèn)者瀏覽器的信息。
  • window.navigator 對(duì)象在編寫(xiě)時(shí)可不使用 window 這個(gè)前綴凑术。
  • 來(lái)自 navigator 對(duì)象的信息具有誤導(dǎo)性翩蘸,不應(yīng)該被用于檢測(cè)瀏覽器版本
txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
txt+= "<p>User-agent language: " + navigator.systemLanguage + "</p>";
  • 由于不同的瀏覽器支持不同的對(duì)象,您可以使用對(duì)象來(lái)檢測(cè)瀏覽器淮逊。例如催首,由于只有 Opera 支持屬性 "window.opera",您可以據(jù)此識(shí)別出 Opera泄鹏。
if (window.opera) {
    ...some action...
}

消息框

可以在 JavaScript 中創(chuàng)建三種消息框:警告框郎任、確認(rèn)框、提示框命满。

  • 警告框經(jīng)常用于確保用戶可以得到某些信息涝滴。
    當(dāng)警告框出現(xiàn)后,用戶需要點(diǎn)擊確定按鈕才能繼續(xù)進(jìn)行操作胶台。
alert("文本")
  • 確認(rèn)框用于使用戶可以驗(yàn)證或者接受某些信息歼疮。
    當(dāng)確認(rèn)框出現(xiàn)后,用戶需要點(diǎn)擊確定或者取消按鈕才能繼續(xù)進(jìn)行操作诈唬。
    如果用戶點(diǎn)擊確認(rèn)韩脏,那么返回值為 true。如果用戶點(diǎn)擊取消铸磅,那么返回值為false赡矢。
confirm("文本")
  • 提示框經(jīng)常用于提示用戶在進(jìn)入頁(yè)面前輸入某個(gè)值。
    當(dāng)提示框出現(xiàn)后阅仔,用戶需要輸入某個(gè)值吹散,然后點(diǎn)擊確認(rèn)或取消按鈕才能繼續(xù)操縱。
    如果用戶點(diǎn)擊確認(rèn)八酒,那么返回值為輸入的值空民。如果用戶點(diǎn)擊取消,那么返回值為null
prompt("文本","默認(rèn)值")

計(jì)時(shí)事件

通過(guò)使用 JavaScript界轩,我們有能力作到在一個(gè)設(shè)定的時(shí)間間隔之后來(lái)執(zhí)行代碼画饥,而不是在函數(shù)被調(diào)用后立即執(zhí)行。我們稱之為計(jì)時(shí)事件浊猾。

  • 未來(lái)的某時(shí)執(zhí)行代碼
var t=setTimeout("javascript語(yǔ)句",毫秒)

setTimeout() 方法會(huì)返回某個(gè)值抖甘。在上面的語(yǔ)句中,值被儲(chǔ)存在名為t 的變量中葫慎。假如你希望取消這個(gè) setTimeout()衔彻,你可以使用這個(gè)變量名來(lái)指定它。
setTimeout() 的第一個(gè)參數(shù)是含有 JavaScript 語(yǔ)句的字符串幅疼。這個(gè)語(yǔ)句可能諸如 "alert('5 seconds!')"米奸,或者對(duì)函數(shù)的調(diào)用昼接,諸如 "alertMsg()"爽篷。
第二個(gè)參數(shù)指示從當(dāng)前起多少毫秒后執(zhí)行第一個(gè)參數(shù)。

  • 取消setTimeout(): clearTimeout()
<html>
<head>
<script type="text/javascript">
var c=0
var t
function timedCount()
{
    document.getElementById('txt').value=c
    c=c+1
    t=setTimeout("timedCount()",1000)
}

function stopCount()
{
    c=0;
    document.getElementById('txt').value=0
    clearTimeout(t);
}
</script>
</head>

<body>

<form>
<input type="button" value="開(kāi)始計(jì)時(shí)慢睡!" onClick="timedCount()">
<input type="text" id="txt">
<input type="button" value="停止計(jì)時(shí)逐工!" onClick="stopCount()">
</form>

<p>請(qǐng)點(diǎn)擊上面的“開(kāi)始計(jì)時(shí)”按鈕來(lái)啟動(dòng)計(jì)時(shí)器。輸入框會(huì)一直進(jìn)行計(jì)時(shí)漂辐,從 0 開(kāi)始泪喊。點(diǎn)擊“停止計(jì)時(shí)”按鈕可以終止計(jì)時(shí),并將計(jì)數(shù)重置為 0髓涯。</p>

</body>

</html>

Cookies

  • cookie 用來(lái)識(shí)別用戶袒啼。
  • cookie 是存儲(chǔ)于訪問(wèn)者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求某個(gè)頁(yè)面時(shí)纬纪,就會(huì)發(fā)送這個(gè) cookie蚓再。你可以使用 JavaScript 來(lái)創(chuàng)建和取回 cookie 的值。
  • 當(dāng)訪問(wèn)者首次訪問(wèn)頁(yè)面時(shí)包各,他或她也許會(huì)填寫(xiě)他/她們的名字摘仅。名字會(huì)存儲(chǔ)于 cookie 中。當(dāng)訪問(wèn)者再次訪問(wèn)網(wǎng)站時(shí)问畅,他們會(huì)收到類似 "Welcome John Doe!" 的歡迎詞娃属。而名字則是從 cookie 中取回的。
  • 當(dāng)訪問(wèn)者首次訪問(wèn)頁(yè)面時(shí)护姆,他或她也許會(huì)填寫(xiě)他/她們的密碼矾端。密碼也可被存儲(chǔ)于 cookie 中。當(dāng)他們?cè)俅卧L問(wèn)網(wǎng)站時(shí)卵皂,密碼就會(huì)從 cookie 中取回秩铆。
  • 當(dāng)訪問(wèn)者首次訪問(wèn)你的網(wǎng)站時(shí),當(dāng)前的日期可存儲(chǔ)于 cookie 中渐裂。當(dāng)他們?cè)俅卧L問(wèn)網(wǎng)站時(shí)豺旬,他們會(huì)收到類似這樣的一條消息:"Your last visit was on Tuesday August 11, 2005!"钠惩。日期也是從 cookie 中取回的。
  • 在這個(gè)例子中我們要?jiǎng)?chuàng)建一個(gè)存儲(chǔ)訪問(wèn)者名字的 cookie族阅。當(dāng)訪問(wèn)者首次訪問(wèn)網(wǎng)站時(shí)篓跛,他們會(huì)被要求填寫(xiě)姓名。名字會(huì)存儲(chǔ)于 cookie 中坦刀。當(dāng)訪問(wèn)者再次訪問(wèn)網(wǎng)站時(shí)愧沟,他們就會(huì)收到歡迎詞。
<html>
<head>
<script type="text/javascript">
function getCookie(c_name)
{
    if (document.cookie.length>0)
    { 
        c_start=document.cookie.indexOf(c_name + "=")
        if (c_start!=-1)
        { 
            c_start=c_start + c_name.length+1 
            c_end=document.cookie.indexOf(";",c_start)
            if (c_end==-1) c_end=document.cookie.length
            return unescape(document.cookie.substring(c_start,c_end))
        } 
    }
    return ""
}

function setCookie(c_name,value,expiredays)
{
    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays)
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())
}

function checkCookie()
{
    username=getCookie('username')
    if (username!=null && username!="")
    {
        alert('Welcome again '+username+'!')
    }
    else 
    {
        username=prompt('Please enter your name:',"")
        if (username!=null && username!="")
        {
            setCookie('username',username,365)
        }
    }
}
</script>
</head>
<body onLoad="checkCookie()">
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鲤遥,一起剝皮案震驚了整個(gè)濱河市沐寺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盖奈,老刑警劉巖混坞,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钢坦,居然都是意外死亡究孕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門爹凹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厨诸,“玉大人,你說(shuō)我怎么就攤上這事禾酱∥⒊辏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵颤陶,是天一觀的道長(zhǎng)颗管。 經(jīng)常有香客問(wèn)我,道長(zhǎng)指郁,這世上最難降的妖魔是什么忙上? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮闲坎,結(jié)果婚禮上疫粥,老公的妹妹穿的比我還像新娘。我一直安慰自己腰懂,他們只是感情好梗逮,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著绣溜,像睡著了一般慷彤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天底哗,我揣著相機(jī)與錄音岁诉,去河邊找鬼。 笑死跋选,一個(gè)胖子當(dāng)著我的面吹牛涕癣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播前标,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坠韩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了炼列?” 一聲冷哼從身側(cè)響起只搁,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俭尖,沒(méi)想到半個(gè)月后氢惋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡目溉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年明肮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缭付。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖循未,靈堂內(nèi)的尸體忽然破棺而出陷猫,到底是詐尸還是另有隱情,我是刑警寧澤的妖,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布绣檬,位于F島的核電站,受9級(jí)特大地震影響嫂粟,放射性物質(zhì)發(fā)生泄漏娇未。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一星虹、第九天 我趴在偏房一處隱蔽的房頂上張望零抬。 院中可真熱鬧,春花似錦宽涌、人聲如沸平夜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忽妒。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間段直,已是汗流浹背吃溅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸯檬,地道東北人罕偎。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像京闰,于是被迫代替她去往敵國(guó)和親颜及。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容