成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《JavaScript高級程序設(shè)計》(第3版)讀書筆記 第8章 BOM

AWang / 1194人閱讀

摘要:僅限數(shù)值表示新窗口的高度。此時只要檢查這個返回值就可以確定彈窗是否被屏蔽。返回一個布爾值,代表用戶選擇還是返回一個字符串或者,輸入了值并確定,返回字符串,其他方法關(guān)閉返回打印查找對話框。

ECMAScript是JavaScript的核心,但如果要在Web中使用JavaScript,那么BOM(瀏覽器對象模型)則無疑才是真正的核心。

W3C為了把瀏覽器中JavaScript最基本的部分標(biāo)準(zhǔn)化,已經(jīng)將BOM的主要方面納入了HTML5規(guī)范中

window對象

BOM 的核心對是window,它表示瀏覽器的一個實例。在瀏覽器中window對象既是通過JavaScript訪問瀏覽器窗口的一個接口,又是ECMAScript規(guī)定的Global對象,因此有權(quán)訪問parseInt()等方法

全局作用域

所有在全局作用域中聲明的變量、函數(shù)都會變成window對象的屬性和方法。

定義全局變量與直接在window對象上定義屬性還是有一點差別:全局變量不能通過delete操作符刪除,而直接定義在window對象上的屬性可以

var age = 29;
window.color = "red";

// 在IE < 9 時拋出錯誤,在其他瀏覽器里返回 false
delete window.age;

// 在IE < 9 時拋出錯誤,在其他瀏覽器里返回 true
delete window.color;

console.log(window.age);       // 29
console.log(window.color);     // undefined

全局環(huán)境下使用var語句添加的window屬性有一個名為[[Configruable]]的特性,這個特性的值被設(shè)置為false,因此不可通過delete刪除。IE8及更早版本在遇到使用delete刪除window屬性的語句時,不管該屬性最初如何創(chuàng)建的,都會拋出錯誤,以示警告。

嘗試訪問未聲明的屬性會拋出錯誤,但是通過查詢window對象,可以知道某個可能未聲明的變量是否存在

// 這里會拋出錯誤 oldValue 未定義
var newValue = oldValue;

// 這里不會拋出錯誤,因為這是一次屬性查詢
// newValue的值是 undefined
var newValue = window.oldValue;
窗口關(guān)系及框架

如果頁面中包含框架,則每個框架都擁有自己的window對象,并且保存在frames集合中。

frames集合中,可以通過數(shù)值索引(從0開始,從左至右,從上到下)或者框架名稱來訪問相應(yīng)的window對象。每個window對象都有一個name屬性,其中包含框架的名稱。


  
     Frameset Example
  
  
    
    
      
      
    
  

可以通過window.frames[0]或者window.frames["topFrame"]來引用上方的框架,不過最好使用top而非window。例如 top.frames[0]

top對象始終指向最高(最外層)的框架,也就是瀏覽器窗口。

top相對的另一個window對象是parentparent(父)對象始終指向當(dāng)前框架的直接上層框架。在某些情況下parent有可能等于top,但在沒有框架的情況下,parent一定等于top。此時他們都是window

窗口位置

用來確定和修改window對象位置的屬性和方法有很多。

IE, Safari, Opera, Chrome 都提供了screenLeftscreenTop屬性,分別用于表示相對屏幕左邊和上邊的位置。

Firefox 則在 screenXscreenY 屬性中提供相同的窗口位置信息, Safari, Chrome也同時支持這兩個屬性。

Opera雖然支持 screenXscreenY 屬性,但與 screenLeftscreenTop 并不對應(yīng),因此建議大家不要在 Opera中使用。

使用下列代碼可以跨瀏覽器取得窗口左邊和上邊的位置

// 確定 screenLeft 和 screenTop 屬性是否存在
// 存在,是在 IE, Safari, Opera, Chrome
// 否則,是在 Firefox中
var leftPos = (typeof window.screenLeft == "number") ?
                window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ?
                window.screenTop : window.screenY;

在IE Opera 中,返回的是頁面到屏幕邊緣的距離(不包括瀏覽器的工具欄等),而 Chrome Firefox Safari 返回的是瀏覽器到屏幕邊緣的距離(包括瀏覽器的工具欄等)。

更讓人抓狂的是, Firefox Safari Chrome 始終返回頁面中每個框架的 top.screenX top.screenY 值。即使在頁面由于被設(shè)置了外邊距發(fā)生偏移的情況下,相對于window對象使用top.screenX top.screenY每次也都會返回相同的值。而IE Opera則會給出框架相對于屏幕辯解的精確坐標(biāo)值。

最終結(jié)果是無法在跨瀏覽器的條件下取得窗口左邊和上邊的精確坐標(biāo)值。

使用moveTo()moveBy()方法,倒是有可能將窗口的精確地移動到一個新位置。這兩個方法都接受兩個參數(shù)

// 將窗口移動到屏幕左上角
window.moveTo(0, 0);

// 將窗口向下移動100像素
window.moveBy(0, 100);

// 將窗口移動到(200, 300)
window.moveTo(200, 300);

// 將窗口向左移動50像素
window.moveBy(-50, 0);

需要注意的是,這兩個方法可能會被瀏覽器禁用;而且在Opera和IE7+中默認(rèn)就是禁用的。

這兩個方法都不適用于框架,只能對最外層的window對象使用。

窗口大小

跨瀏覽器確定一個窗口的大小不是一件簡單的事情。

IE9+ Firefox Safari Opera Chrome 均為此提供了4個屬性:innerwidth innerHeight outerWidth outerHeight。

IE9 Safari Firefox 中 outerWidth outerHeight 返回瀏覽器窗口本身的尺寸(無論是從最外層的window對象還是從某個框架訪問)。

Opera中這兩個屬性的值表示頁面視圖容器的大小。

innerwidth innerHeight則表示容器中頁面視圖區(qū)的大?。p去邊框?qū)挾龋?/p>

Chrome 中 四個值返回的相同,即視口(viewport)大小而非瀏覽器窗口大小。

下面的代碼可以跨瀏覽器取得視口大小,但最終無法確定瀏覽器窗口本身大小

var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight;

// document.compatMode 這個屬性將在第10章討論
if (typeof pageWidth != "number") {
  if (document.compatMode == "CSS1Compat") {
    pageWidth = document.documentElement.clientWidth;
    pageHeight = document.documentElement.clientHeight;
  } else {
    pageWidth = document.body.clientWidth;
    pageHeight = document.body.clientHeight;
  }
}

使用 resizeTo()resizeBy() 方法可以調(diào)整瀏覽器窗口的大小。需要注意,這兩個方法也可能被瀏覽器禁用。在Opera和IE7+中默認(rèn)禁止

這兩個方法不適用于框架,只能對最外層的window對象使用

// 調(diào)整到 100 x 100
window.resizeTo(100, 100);

// 調(diào)整到 200 x 150
window.resizeBy(100, 50);

// 調(diào)整到 300 x 300
window.resizeTo(300, 300);
導(dǎo)航和打開窗口

window.open() 方法既可以導(dǎo)航到一個特定的URL,也可以打開一個新的瀏覽器窗口。接受四個參數(shù):

要加載的URL

窗口目標(biāo) (窗口或者框架的名字以及特殊窗口名稱: _self, _parent, _top, _blank)

特性字符串(新窗口的特性設(shè)置,逗號分隔)

表示新頁面是否取代瀏覽器歷史記錄中當(dāng)前加載頁面的布爾值

// 等同于 
window.open("http://www.wrox.com", "topFrame");
彈出窗口

如果給window.open()傳遞的第二個參數(shù)并不是一個已經(jīng)存在的窗口或者框架,那么該方法就會根據(jù)在第三個參數(shù)位置上傳入的字符串創(chuàng)建一個新窗口或者新標(biāo)簽。

如果沒有傳入第三個參數(shù),那么就會打開一個帶有全部默認(rèn)設(shè)置(工具欄、地址欄和狀態(tài)欄等)的新瀏覽器窗口(或者新標(biāo)簽)。

在不打開新窗口的情況下,會忽略第三個參數(shù)。

第三個參數(shù)是一個逗號分隔的設(shè)置字符串,表示新窗口有哪些特性。

設(shè)置 說明
fullscreen yes/no 表示瀏覽器窗口是否最大化。僅限IE
height 數(shù)值 表示新窗口的高度。不能小于100
width 數(shù)值 表示新窗口的寬度。不能小于100
left 數(shù)值 左坐標(biāo),不能是負(fù)值
top 數(shù)值 上坐標(biāo)。不能是負(fù)值
location yes/no 表示是否在瀏覽器窗口中顯示地址欄。不同瀏覽器的默認(rèn)值不同。如果設(shè)置為no,地址欄可能會隱藏,也可能會禁用,取決于瀏覽器
menubar yes/no 是否顯示菜單欄。默認(rèn)no
resizeable yes/no 是可以拖動窗口大小。默認(rèn)值no
scrollbars yes/no 是否允許滾動。默認(rèn)no
status yes/no 是否顯示狀態(tài)欄。默認(rèn)no
toolbar yes/no 是否顯示工具欄。默認(rèn)no

window.open()方法會返回一個指向新窗口的引用,大致與其他window對象一致,但我們可以進(jìn)行更多操作控制。

例如有些瀏覽器針對通過window.open()創(chuàng)建的還口不允許我們針對朱瀏覽器窗口調(diào)整大小或移動位置,但卻允許我們針對通過window.open()創(chuàng)建的窗口調(diào)整大小或移動位置。

var wroxWin = window.open("http://www.wrox.com", "wroxWindow",
            "height=400,width=400,top=10,left=10,resizable=yes");

// 新創(chuàng)建的window對象有一個opener屬性
// 保存打開它的原始窗口對象
// 而原始窗口不跟蹤打開的新窗口,沒有指向新窗口對象的屬性
console.log(wroxWin.opener == window); // true

// 調(diào)整大小
wroxWin.resizeTo(500, 500);

// 移動位置
wroxWin.moveTo(100, 100);

// 關(guān)閉新打開的窗口
// 這個方法僅限于通過 window.open() 打開的彈出窗口
// 對于主窗口如果沒有得到用于的允許是不能關(guān)閉它的。
wroxWin.close();

// 彈窗關(guān)閉后,窗口的引用仍然還在
// 但除了檢測其closed屬性沒有其他用處
console.log(wroxWin.closed);    // true

有些瀏覽器(如IE8 和 Chrome)會在獨立的進(jìn)程運行每一個標(biāo)簽頁。當(dāng)一個標(biāo)簽打開另一個標(biāo)簽頁時,如果兩個window對象之間需要彼此通信,那么新標(biāo)簽就不能運行在獨立的進(jìn)程中。

在Chrome中新建的標(biāo)簽頁opener屬性設(shè)置為null,即表示在多帶帶的進(jìn)程中運行新標(biāo)簽

var wroxWin = window.open("http://www.wrox.com", "wroxWindow",
            "height=400,width=400,top=10,left=10,resizable=yes");

wroxWin.opener = null;
安全限制

目前大部分瀏覽器都不能通過第四個參數(shù)修改是否顯示狀態(tài)欄,不允許彈窗到屏幕意外,不允許關(guān)閉地址等等,加強彈窗的安全性,以免用戶和系統(tǒng)對話框混淆。

Chrome采取了不同的處理方式,它不會像其他瀏覽器那樣簡單的屏蔽這些彈窗,而是只是顯示它們的標(biāo)題欄,并放在窗口右下角。

彈出窗口屏蔽程序

大部分瀏覽器或者瀏覽器插件都會屏蔽彈窗,此時window.open()很可能返回null。此時只要檢查這個返回值就可以確定彈窗是否被屏蔽。

var wroxWin = window.open("http://www.wrox.com", "_blank");
if (wroxWin == null) {
  console.log("The popup was blocked!");
}

瀏覽器拓展程序(插件)或其他程序阻止彈窗,那么 window.open()通常會拋出錯誤。因此不但要檢測返回值,還要將對 window.open()的調(diào)用封裝在一個 try-catch 塊中

var bloacked = false;

try {
  var wroxWin = window.open("http://www.wrox.com", "_blank");
  if (wroxWin == null) {
    bloacked = true;
  }
} catch (ex) {
  bloacked = true;
}

if (blocked) {
  console.log("The popup was blocked!");
}
間歇調(diào)用和超時調(diào)用

JavaScript是單線程語言,但它允許通過設(shè)置超時值和間歇值來調(diào)度代碼在特定的時刻執(zhí)行。

// 第一個參數(shù)傳遞字符串,不推薦!
setTimeout("alert("Hello World!");", 1000);

// 推薦的方式
setTimeout(() => {
  alert("Hello World!");
}, 1000);

JavaScript是一個單線程解釋器,因此一定時間內(nèi)只能執(zhí)行一段代碼。為了控制要執(zhí)行的代碼,就有一個JavaScript任務(wù)隊列。這些任務(wù)會按照將他們添加到隊列中的順序執(zhí)行。

第二個參數(shù)是告訴JavaScript再過多久把當(dāng)前任務(wù)添加到隊列中。之后如果隊列是空的,那么添加的代碼會立即執(zhí)行,如果不是空的,那么就要等前面的代碼執(zhí)行完了以后再執(zhí)行。

該方法會返回一個數(shù)值ID,這是計劃執(zhí)行代碼的唯一標(biāo)識符,可以通過它來取消超時調(diào)用。

var timeoutId = setTimeout(() => {
  alert("Hello World!");
}, 1000);

// 取消執(zhí)行
clearTimeout(timeoutId);

超時調(diào)用的代碼都是在全局作用域中執(zhí)行的,因此函數(shù)中 this 的值在非嚴(yán)格模式下 指向 window ,在嚴(yán)格模式下是 undefined。

setInterval()用法與上述類似

系統(tǒng)對話框

alert(), confirm(), prompt() 方法可以調(diào)用系統(tǒng)對話框向用戶顯示消息。系統(tǒng)對話框與瀏覽器中顯示的網(wǎng)頁沒有關(guān)系,不包含HTML,外觀由操作系統(tǒng)和瀏覽器設(shè)置決定。打開對話框都是同步和模態(tài)的。也就是說,這些對話顯示的時候,代碼會停止執(zhí)行,而關(guān)掉這些對話框又會恢復(fù)執(zhí)行。

confim() 返回一個布爾值,代表用戶選擇"ok"還是"cancel"

prompt() 返回一個字符串或者null,輸入了值并確定,返回字符串,其他方法關(guān)閉返回null

打印、查找 對話框 print() find()。沒什么卵用

location對象

location是最有用的BOM對象之一,它提供了與當(dāng)前窗口中加載的文檔有關(guān)的信息,還提供一些導(dǎo)航功能。

location 對象既是window對象的屬性,也是document對象的屬性;換言之,window.location document.location引用的是同一個對象。

屬性名 例子 說明
hash "#contents" 返回 URL 中的hash(#號后跟零或多個字符),如果URL中不包含散列,則返回空字符串
host "www.wrox.com:80" 返回服務(wù)器名稱和端口號(如果有)
hostname "www.wrox.com" 返回服務(wù)器名稱不帶端口號
href "http:/www.wrox.com" 返回當(dāng)前加載頁面的完整URL。而location對象的toString()方法也返回這個值
pathname "/WileyCDA/" 返回URL中的目錄或者文件名
port "www.wrox.com" 返回端口號。如果沒有端口號,返回空字符串
protocol "http:" 返回頁面使用的協(xié)議。通常是 http: https:
search "?q=javascript 返回URL查詢字符串。這個字符串以問號開頭
查詢字符串參數(shù)

雖然上表的屬性可以訪問到location對象大多數(shù)信息,但是其中訪問URL包含查詢字符串的屬性并不方便。盡管location.search返回從問號到URL末尾的所有內(nèi)容,但卻沒有辦法逐個訪問其中的每個查詢字符串參數(shù)。

為此我們可以創(chuàng)建如下函數(shù)

funcction getQueryStringArgs() {

  // 取得查詢字符串并去掉開頭的問號
  var qs = (location.search.length > 0 ? location.search.substring(1) : "");

  // 保存數(shù)據(jù)的對象
  var args = {};

  // 取得每一項
  var items = qs.length ? qs.split("&") : [];
  var item = null;
  var name = null;
  var value = null;

  // 在for循環(huán)中使用
  var i = 0;
  var len = items.length;

  // 逐個將每一項添加到args對象中
  for (var 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;
}
位置操作

使用location對象可以通過很多方式來改變?yōu)g覽器的位置。

首先也是最常用的方式 assign()方法,并為其傳遞一個URL。立即打開新的URL并在瀏覽器的歷史記錄中生成一條記錄。如果是將location.hrefwindow.location設(shè)置為一個URL值,也會以該值調(diào)用assign()方法。

location.assign("http://www.wrox.com");
window.location = "http://www.wrox.com";
location.;

另外修改location對象的其他屬性也可以改變當(dāng)前加載的頁面。下面的例子展示了通過將hash, search, hostname, pathname, prot 屬性設(shè)置為新值來改變URL

// 假設(shè)初始URL為 http://www.wrox.com/WileyCDA/

// 將URL修改為 http://www.wrox.com/wileyCDA/#section1
location.hash = "#section1";

// 將URL修改為 http://www.wrox.com/wileyCDA/?q=javascript
location.search = "?q=javascript";

// 將URL修改為 http://www.wrox.com/wileyCDA/
location.hostname = "www.yahoo.com"

// 將URL修改為 http://www.yahoo.com/mydir/
location.pathname = "mydir"

// 將URL修改為 http://www.yahoo.com:8080/wileyCDA/
location.port = 8080;

每次修改location屬性(hash除外),頁面都會以新URL重新加載

通過上述任何一種方式修改URL之后,瀏覽器的歷史記錄中就會生成一條新紀(jì)錄,因此用戶通過單擊“后退”按鈕都會導(dǎo)航到前一個頁面。要禁用這種行為,可以使用replace()方法。這個方法只接受一個參數(shù),即要盜號的URL。雖然結(jié)果會導(dǎo)致瀏覽器位置改變,但不會在歷史記錄中生成新記錄。在調(diào)用replace()方法后,用戶不能回到前一個頁面

在IE8 Firefox 1 Safari 2+ Opera9+ Chrome 中,修改hash的值會在瀏覽器的歷史記錄中生成一條記錄。在IE早期版本中,hash屬性不會再用戶單擊“后退”和“前進(jìn)”按鈕時被更新,而只會在用戶單擊包含hash的URL時才會被更新

reload() 作用是重新加載當(dāng)前頁面的顯示。如果不傳參,頁面就會以最有效的方式重新加載。如果頁面上次請求一來并沒有改變過,頁面就會從瀏覽器緩存中重新加載。如果要強制從服務(wù)器重新加載,則需要像下面這樣為該方法傳遞參數(shù)true

位于reload()調(diào)用之后的代碼可能會也可能不會執(zhí)行,這要取決于網(wǎng)絡(luò)延遲或系統(tǒng)資源等因素。為此最好將reload()放在代碼的最后一行

navigator對象

每個瀏覽器中的navigator對象表現(xiàn)是一致的,也有一套自己的屬性

屬性或方法 說明 IE Firefox Safari/Chrome Opera
appCodeName 瀏覽器的名稱。通常都是Mozilla,即使在非Mozilla瀏覽器中也是如此 3.0+ 1.0+ 1.0+ 7.0+
appMinorVersion 次版本 4.0+ - - 9.5+
appName 完整的瀏覽器名稱 3.0+ 1.0+ 1.0+ 7.0+
appVersion 瀏覽器的版本。一般不與實際的瀏覽器版本對應(yīng) 3.0+ 1.0+ 1.0+ 7.0+
buildID 瀏覽器變異版本 - 2.0+ - -
cookieEnabled 表示cookie是否啟用 4.0+ 1.0+ 1.0+ 7.0+
cpuClass 客戶端計算機中使用的cpu類型 4.0+ - - -
javaEnabled() 表示當(dāng)前瀏覽器中是否啟用了java 4.0+ 1.0+ 1.0+ 7.0+
language 瀏覽器的主語言 - 1.0+ 1.0+ 7.0+
mineTypes 表示當(dāng)前瀏覽中注冊的MIME類型數(shù)組 4.0+ 1.0+ 1.0+ 7.0+
onLine 表示瀏覽器是否連接到了因特網(wǎng) 4.0+ 1.0+ - 9.5+
oscpu 客戶端計算機的操作系統(tǒng)或使用的CPU - 1.5+ - -
platform 瀏覽器所在的系統(tǒng)平臺 4.0+ 1.0+ 1.0+ 7.0+
plugins 瀏覽器中安裝的插件信息的數(shù)組 4.0+ 1.0+ 1.0+ 7.0+
preference 設(shè)置用戶的首選項 - 1.5+ - -
product 產(chǎn)品名稱 如Gecko - 1.0+ 1.0+ -
productSub 關(guān)于產(chǎn)品的次要信息 - 1.0+ 1.0+ -
registerContentHandler() 針對特定的MIME類型將一個站點注冊為處理程序 - 2.0+ - -
registerProtocolHandler() 針對特定的協(xié)議將一個站點注冊為處理程序 - 2.0+ - -
securityPolicy 已經(jīng)廢棄。安全策略的名稱。為了與Netscape Navigator4向后兼容而保留下來 - 1.0+ - -
systemLanguage 操作系統(tǒng)的語言 4.0+ - - -
taintEnabled() 已廢棄。表示是否允許變量被修改。為了與Netscape Navigator3向后兼容而保留下來 4.0+ 1.0+ - 7.0
userAgent 瀏覽器的用戶代碼字符串 3.0+ 1.0+ 1.0+ 7.0+
userLanguage 操作系統(tǒng)的默認(rèn)語言 4.0+ - - 7.0+
userProfile 借以訪問用戶個人信息的對象 4.0+ - - -
vendor 瀏覽器的品牌 - 1.0+ 1.0+ -
vendorSub 有關(guān)供應(yīng)商的次要信息 - 1.0+ 1.0+ -
檢查插件

檢測瀏覽器中是否安裝了特定的插件是一種最常見的檢測歷程。對于非IE瀏覽器,可以使用plugins數(shù)組來達(dá)到這個目的。該數(shù)組中的每一項都包含下列屬性。

name: 插件名字

description: 插件的描述

filename: 插件的文件名

length: 插件所處理的MIME類型數(shù)量

一般來說name屬性中會包含檢測插件必需的所有信息,但有時候也不完全如此。在檢測插件時,需要像下面這樣循環(huán)代碼每個插件并將插件的name與給定的名字進(jìn)行比較

// 檢測插件(在IE中無效)
function hasPlugin(name) {
  name = name.toLowerCase();
  for (var i=0; i < navigator.plugins.length; i++) {
    if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1) {
      return true;
    }
  }
  return false;
}

//  檢測flash
console.log(hasPlugin("Flash"));

//  檢測QuickTime
console.log(hasPlugin("QuickTime"));

檢測IE中的插件比較麻煩,因為IE不支持Netscape式的插件,唯一的方式是使用專用的ActiveXObject類型,并嘗試創(chuàng)建一個特定插件的實例。IE是以COM對象的方式實現(xiàn)插件的,而COM對象使用唯一標(biāo)識符來標(biāo)識。因此要想檢測特定的插件,就必須知道其COM標(biāo)識符,例如Flash的標(biāo)識符是ShockwaveFlash.ShockwaveFlash。知道唯一標(biāo)識符后,就可以編寫下面的函數(shù)來檢測

// 檢測IE中的插件
function hasIEPlugin(name) {
  try {
    new ActiveXObject(name);
    return true
  } catch (ex) {
    return false;
  }
}

//  檢測flash
console.log(hasIEPlugin("ShockwaveFlash.ShockwaveFlash"));

//  檢測QuickTime
console.log(hasIEPlugin("QuickTime.QuickTime"));

鑒于兩種方式差別較大,典型的做法是針對每個插件分別創(chuàng)建檢測函數(shù)

// 檢測所有瀏覽器中的Flash
function hasFlash() {
  var result = hasPlugin("Flash");
  if (!result) {
    result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
  }
  return result;
}

plugins集合有一個名叫refresh()的方法,用于刷新plugins以反映最新安裝的插件。這個方法接收一個參數(shù):表示是否應(yīng)該重新加載頁面的一個布爾值。如果將這個值設(shè)為true,則會重新加載包含插件的所有頁面;否則只更新plugins集合,不重新加載頁面。

注冊處理程序

registerContentHandler()registerProtocolHandler() 方法可以讓一個站點知名它可以處理特定類型的信息。隨著RSS閱讀器和在線電子郵件程序的信息,注冊處理程序就為像使用桌面應(yīng)用程序一樣默認(rèn)使用這些在線應(yīng)用程序提供了一種方式。

registerContentHandler()接收三個參數(shù):

要處理的MIME類型

可以處理的MIME類型的頁面的URL

應(yīng)用程序的名稱

// 要將一個站點注冊為處理RSS源的處理程序
navigator.registerContentHandler("application/rss+xml",
  "http://www.somereader.com?feed=%s", "Some Reader");

registerProtocolHandler() 也是三個參數(shù)

要處理的協(xié)議 (mailto 或 ftp)

處理該協(xié)議的頁面的URL

應(yīng)用程序的名稱

// 要將一個應(yīng)用程序注冊為默認(rèn)的郵件客戶端
navigator.registerProtocolHandler("mailto",
  "http://www.somemailclient.com?cmd=%s", "Some Mail Client");
screen對象

screen對象基本只用來表明客戶端的能力,其中包括瀏覽器窗口外部的顯示器信息,如像素寬度和高度等。

用處不大

history對象

history對象保存著用戶上網(wǎng)的歷史記錄,從窗口被打開的那一刻算起。因為historywindow對象的屬性,因此每個瀏覽器窗口,每個標(biāo)簽頁,乃至每個框架都有自己的history對象與特定的window對象關(guān)聯(lián)。

出于安全考慮,開發(fā)人員無法得知用戶瀏覽器過的URL。不過借由用戶訪問過的頁面列表,同樣可以在不知道實際URL的情況視線后退和前進(jìn)

使用go()方法可以在用戶的歷史記錄中任意跳轉(zhuǎn),可以向前向后,接受一個參數(shù)整數(shù)值或者字符串。

// 后退一頁
history.go(-1);

// 前進(jìn)一頁
history.go(1);

// 前進(jìn)兩頁
history.go(2);

// 傳入字符串會跳轉(zhuǎn)到歷史記錄中包含該字符串的第一個位置
// 如果沒有包含的記錄,則什么都不做
history.go("wrox.com");

還可以使用兩個簡寫方法代替 back()forward()。這兩個方法模仿瀏覽器的“后退”“前進(jìn)”按鈕

history還有一個length屬性,保存著歷史記錄的數(shù)量。包括所有的歷史記錄,即所有向前和向后的記錄。對于加載到窗口、標(biāo)簽頁或框架中的第一個頁面而言,hitosty.length等于0

if (history.length == 0) {
  // 這里應(yīng)該是用戶打開窗口后的第一個頁面
  ...
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109535.html

相關(guān)文章

  • JavaScript高級程序設(shè)計》(3讀書筆記 1~2

    摘要:表示應(yīng)該立即下載腳本,但不應(yīng)妨礙頁面中的其他操作可選。表示通過屬性指定的代碼的字符集。表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行。實際上,服務(wù)器在傳送文件時使用的類型通常是,但在中設(shè)置這個值卻可能導(dǎo)致腳本被忽略。 第1章 JavaScript 簡介 雖然JavaScript和ECMAScript通常被人們用來表達(dá)相同的含義,但JavaScript的含義比ECMA-262要多得多...

    Corwien 評論0 收藏0
  • JavaScript高級程序設(shè)計》(3讀書筆記 3

    摘要:本質(zhì)上是由一組無序名值對組成的。浮點數(shù)值的最高精度是位小數(shù),但在進(jìn)行計算時其精度遠(yuǎn)遠(yuǎn)不如證書。例如這是使用基于數(shù)值的浮點計算的通病,并非獨此一家數(shù)值范圍。 函數(shù)名不能使用關(guān)鍵字(typeof不行但typeOf可以,區(qū)分大小寫) 標(biāo)識符就是指變量、函數(shù)、屬性的名字,或者函數(shù)的參數(shù)。 第一個字符必須是一個字母、下劃線(_)或者一個美元符號($) 其他字符可以是字母、下劃線、美元符號或...

    renweihub 評論0 收藏0
  • JavaScript高級程序設(shè)計》(3讀書筆記 4 變量、作用域和內(nèi)存問題

    摘要:具體說就是執(zhí)行流進(jìn)入下列任何一個語句時,作用域鏈就會得到加長語句的塊。如果局部環(huán)境中存在著同名的標(biāo)識符,就不會使用位于父環(huán)境中的標(biāo)識符訪問局部變量要比訪問全局變量更快,因為不用向上搜索作用域鏈。 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數(shù)據(jù)類型:Undefined, Null, Boolean, Number, String ...

    lidashuang 評論0 收藏0
  • JavaScript高級程序設(shè)計》(3讀書筆記 7 函數(shù)表達(dá)式

    摘要:定義函數(shù)表達(dá)式的方式有兩種函數(shù)聲明。不過,這并不是匿名函數(shù)唯一的用途。可以使用命名函數(shù)表達(dá)式來達(dá)成相同的結(jié)果閉包匿名函數(shù)和閉包是兩個概念,容易混淆。匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對象通常指向通過改變函數(shù)的執(zhí)行環(huán)境的情況除外。 定義函數(shù)表達(dá)式的方式有兩種: 函數(shù)聲明。它的重要特征就是 函數(shù)聲明提升(function declaration hoisting) 即在執(zhí)行代碼之前會...

    鄒立鵬 評論0 收藏0
  • JavaScript高級程序設(shè)計》(3讀書筆記 11 DOM拓展

    摘要:對的兩個主要拓展是選擇和。以下插入標(biāo)記的拓展已經(jīng)納入了規(guī)范。在寫模式下,會根據(jù)指定的字符串創(chuàng)建新的子樹,然后用這個子樹完全替換調(diào)用元素。在刪除帶有時間處理程序或引用了其他對象子樹時,就有可能導(dǎo)致內(nèi)存占用問題。 盡管DOM作為API已經(jīng)非常完善了,但為了實現(xiàn)更多功能,仍然會有一些標(biāo)準(zhǔn)或?qū)S械耐卣埂?008年之前,瀏覽器中幾乎所有的拓展都是專有的,此后W3C著手將一些已經(jīng)成為事實標(biāo)準(zhǔn)的專...

    luck 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<