window對象

計時器javascript

setTimeout和setInterval能夠用來註冊在指定時間只有單次或重複調用的函數,由於它們都是客戶端javascript中重要的全局函數,因此定義爲window對象的方法,但做爲通用函數,其實不會對窗口作什麼事情html

它們返回一個值,這個值能夠傳遞給clearTimeout()用於取消這個函數的執行java

因爲歷史緣由,setTimeout()和setInterval()的一個參數能夠做爲字符串傳入。若是這麼作,那這個字符串會在指定的超時時間或間隔以後進行求值(至關於執行eval)jquery

若是以0毫秒的超時時間來調用setTimeout(),那麼指定的函數不會當即執行。相反會把它放到隊列中,等到前面處於等待狀態的事件處理程序所有執行完成後,再當即調用它web

function test(){
  console.log("1");
  setTimeout(function(){console.log("2");},0);
  console.log("3");
  
  
  
}
test();
//1
//3
//2

Window對象的location屬性引用的是location對象,它表示該窗口當前顯示的文檔的URL,並定義了方法來使窗口載入新的文檔數組

Document對象的location屬性也引用到Location對象;瀏覽器

console.log(window.location===document.location);//true

Document對象也有一個URL屬性,是文檔首次載入後保存該文檔的URL的靜態字符串。若是定位到文檔中的片斷標識符(如#table-of-contents),Location對象會作相對應的更改,document.URL屬性卻不會改變。函數

解析URl工具

window對象的location屬性引用的是Location對象,它表示該窗口中當前顯示的文檔的URL。location對象的href屬性是一個字符串,後背包含url的完整版本。location對象的toString()方法返回href屬性的值,所以在會隱式調用toString的狀況下,可使用location代替location.href.ui

這個對象的其餘屬性--protocol,host,hostname,port,pathname和search,分別表示URL的各個部分。它們稱爲「URL分解」屬性,同時被Link對象(經過HTML文檔中的《a》和《area》元素建立)支持。

location對象的hash和search屬性比較有趣。若是有的話,hash屬性返回URL中的「片斷標識符」部分,search屬性也相似,它返回的是問號以後的url,這部分一般是某種類型的查詢字符型。通常來講,這部份內容是用來參數化URL並在其中嵌入參數的

function urlArgs(){
  var args={};
  var query=window.location.search.substring(1);
  var pairs=query.split("&");
  for(var i=0;i<pairs.length;i++){
    var pos=pairs[i].indexOf("=");
    if(pos==-1)continue;
    var name=pairs[i].substring(0,pos);
    var value=pairs[i].substring(pos+1);
    value=decodeURIComponent(value);
    arg[name]=value;
    
  }
  return args;
}

location對象的assign方法可使窗口載入並顯示你指定的url中的文檔。repalce方法也相似,但他在載入新文檔以前會從瀏覽歷史中把當前文檔刪除。若是腳本無條件的載入一個新文檔,replace方法可能比assgin方法更好的 選擇。不然,後退按鈕會把瀏覽器帶回到原始文檔,而相同的腳本則會再次載入新文檔。相對url是相對於當前頁面所在的目錄來解析的

除了assgin和replace方法,location對象還定義了reload方法,後者可讓瀏覽器從新載入當前文檔。

使瀏覽器跳轉到新頁面的一種更傳統的方法是直接把新的URL賦值給location屬性。

location=「http://www.orerlly.com」;

還能夠把相對url賦值個location,它們會相對當前url進行解析

location=「page2.html」;

純粹的片斷標識符是相對url的一種類型,它不會讓瀏覽器載入新文檔,但只會是它滾動到文檔的某個位置。#top標識符是個特殊的例子:若是文檔中沒有元素的ID是top,它會讓瀏覽器跳到文檔開始處

location=「#top」;

location對象的url分解屬性是可寫的,對它們從新賦值會改變url的位置,而且致使瀏覽器載入一個新的文檔(若是改變的是hash屬性,則在當前文檔中進行跳轉)

location。search=「?page=」+(pagenum+1);

瀏覽歷史

window對象的history屬性引用的是該窗口的History對象。history對象是用來把窗口的瀏覽歷史用文檔和文檔狀態列表的形式表示。history對象的length屬性表示瀏覽歷史列表中的元素數量

history對象的back和forward方法與瀏覽器的後退和前進按鈕同樣:它們使瀏覽器在瀏覽歷史中先後跳轉一格。第三個方法-go接受一個整數參數,能夠在歷史列表中向前(正參數)或向後(負參數)跳過任意多個頁

若是窗口包含多個子窗口,子窗口的瀏覽歷史會按時間順序穿插在主窗口的歷史中。這意味着主窗口調用history.back可能會致使其中一個子窗口往回跳轉到前一個顯示的文檔,但主窗口保留當前狀態不變

瀏覽器和屏幕信息

腳步有時候須要獲取和它們所在的web瀏覽器或瀏覽器所在桌面相關的信息

本節介紹window對象的navigator和screen屬性,它們分別引用的是Navigator和Screen對象

window對象的navigator屬性引用的是包含瀏覽器廠商和版本對象

var s=navigator.userAgent.toLowerCase();

var browser=(function(){
  var s=navigator.userAgent.toLowCase();
  var match=/(webkit)[\/]([\w.]+)/.exec(s)||/(opera)(?:.*version)?[\/]([\w.]+)/.exec(s)||/(msie)([\w.]+)/.exec(s)||/compatible/.test(s)&&/(mozilla)(?:.*?rv:([\w.]+))?/.exec(s)||[];
  return {
    name:match[1]||"",version:match[2]||0
  };
}());

window對象的screen屬性引用的是Screen對象。它提供有關窗口顯示的大小和可用的顏色數量的信息。屬性width和height指定的是以像素爲單位的窗口大小。屬性availWidth和availHeight指定的是ishijie能夠的顯示大小。

它們排除了像桌面任務欄這樣的特性所佔用的空間,屬性colorDepth指定的是顯示的BPP,典型的值是16 24 32

showModalDialog()在瀏覽器當前窗口中顯示一個模態窗口。第一個參數用以指定提供對話框html內容的url,第二個參數是一個任意值(數組和對象都可),這個值在對話框裏的腳本中能夠經過window.dailogArguments屬性的值訪問。第三個參數是一個非標準的列表,包含以分號隔開的name=value對,若是提供了這個參數,能夠配置對話框的尺寸和其餘屬性,用dialogwidth和dialogheight來設置對話框窗口的大小。用resizable=yes來容許用戶改變窗口大小

window對象的onerror屬性是一個事件處理程序,當未捕獲的異常傳播到調用踐上時就會調用它,並把錯誤消息輸出到瀏覽器的javascipt控制檯上。若是給這個屬性賦值一個函數,那麼只要這個窗口發生了javascipt錯誤,就會調用該函數,即它成了窗口的錯誤處理程序

window對象的onerror事件處理函數的調用經過三個字符串參數,而不是經過一般傳遞的一個事件對象

第一個參數是描述錯誤的一條消息,第二個參數是一個字符串,它存放引起錯誤的javascript代碼所在的文檔的url,第三個參數是文檔中發生錯誤的行數

除了這三個參數以外,onerror處理程序的返回值也很重要。若是onerror處理程序返回false,它通知瀏覽器事件處理程序已經處理了錯誤,不須要其餘操做。換句話說,瀏覽器不該該顯示它本身的錯誤信息。遺憾的是,因爲歷史緣由,firefox裏的錯誤處理程序必須返回true來表示他已經處理了錯誤

若是在html文檔中使用id屬性來爲元素命名,而且若是window對象沒有此名字的屬性,window對象會賦予一個屬性,它的名字是id屬性的值,它們的值只想表示文檔元素的HTMLElement對象。可是有一個重要的警告:若是window對象已經具備此名字的屬性,這就不會發生。好比id是history location navigator,就不會以全局變量的形式出現,由於這些id已經被佔用了。一樣,若是html文檔包含一個id爲x的元素,而且還在代碼中聲明並賦值給全局變量x,那麼顯示聲明的變量會隱藏隱式的元素變量。若是腳本中的變量聲明出如今命名元素以前,那這個變量的存在就會阻止元素獲取它的window屬性。而若是腳本中的變量聲明出如今命名元素以後,那麼變量的顯式賦值會覆蓋該屬性的隱式值

var $=function(id){
  return document.getElementById(id);
};
var test=$("test");

不少客戶端類庫都定義了$函數,相似上面同樣來經過ID查找元素。(jquery的$函數做爲通用的元素選擇方法,基於id,標籤名,class屬性或者其餘標準,返回一個或者多個元素)

假設id並無被window對象使用的話,那麼任何有id屬性的html元素都會成爲全局變量的值,id元素在文檔中必須是惟一的;兩個元素不能有相同的id,可是這對name屬性無效。

若是上面的元素有多於一個有相同的name屬性(或者一個元素有name屬性,而另外一元素有相同值得id屬性),那麼具備該名稱的隱世全局變量會引用一個類數組對象,這個類數組對象的元素是全部命名的元素

有name或id屬性的《iframe》元素是個特殊的例子。爲它們隱世建立的變量不會引用表示元素自身的Element對象,而是引用表示《iframe》元素建立的嵌套瀏覽器窗體的window對象

 使用window對象的open()方法能夠打開一個新的瀏覽器窗口,window。open載入指定的url到新的或已存在的窗口中,並返回表明那個窗口的window對象。它有4個可選的參數。

open的第一個參數是要在新窗口中顯示的文檔的url。若是這個參數省略了(也能夠是空字符串),那麼會使用空頁面的url about:blank

open的第二個參數是新打開的窗口的名字,若是指定的是一個已經存在的窗口的名字(而且腳本容許跳轉到那個窗口),會直接使用已存在的窗口。不然,會打開新的窗口,並將這個指定的名字賦值給它,若是省略此參數,會使用指定的名字「_blank」打開一個新的、未命名的窗口。

open的第三個可選參數是一個以逗號分隔的列表,包含大小和各類屬性,用以代表新窗口是如何打開的,若是省略這個參數,那麼新窗口就會用一個默認的大小,並且帶有一整組標準的ui組建,即菜單欄,狀態欄,工具欄等,另外一方面,若是指定這個參數,就能夠指定窗口的尺寸,以及它包含的一組屬性

open的返回值是表明命名或者新建立的窗口的window對象。能夠在本身的Javascript代碼中使用這個window對象來引用新建立的窗口,就像使用隱式的window對象window來引用運行代碼的窗口同樣。

var w=window.open();

w.alert();

w.location="";

在由window。open方法建立的窗口中,opner屬性引用的是打開它的腳本的window對象。在其餘窗口中,opener爲null

w.open().opener===w;

相關文章
相關標籤/搜索