亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

WWindow對象

wapeyang / 3630人閱讀

摘要:我們可以通過屬性對該事件指定回調(diào)函數(shù)。出錯(cuò)了由于歷史原因,的事件的回調(diào)函數(shù)不接受錯(cuò)誤對象作為參數(shù),而是一共可以接受五個(gè)參數(shù),它們的含義依次如下。

1.window.requestIdleCallback()

window.requestIdleCallback(callback[, options])
callback參數(shù)是一個(gè)回調(diào)函數(shù)。該回調(diào)函數(shù)執(zhí)行時(shí),系統(tǒng)會(huì)傳入一個(gè)IdleDeadline對象作為參數(shù)。IdleDeadline對象有一個(gè)didTimeout屬性(布爾值,表示是否為超時(shí)調(diào)用)和一個(gè)timeRemaining()方法(返回該空閑時(shí)段剩余的毫秒數(shù))

options參數(shù)是一個(gè)配置對象,目前只有timeout一個(gè)屬性,用來指定回調(diào)函數(shù)推遲執(zhí)行的最大毫秒數(shù)。該參數(shù)可選

requestIdleCallback(myNonEssentialWork);

function myNonEssentialWork(deadline) {
while (deadline.timeRemaining() > 0) {

doWorkIfNeeded();

}
}
上面代碼中,requestIdleCallback()用來執(zhí)行非關(guān)鍵任務(wù)myNonEssentialWork。該任務(wù)先確認(rèn)本次空閑時(shí)段有剩余時(shí)間,然后才真正開始執(zhí)行任務(wù)

下面是指定timeout的例子。

requestIdleCallback(processPendingAnalyticsEvents, { timeout: 2000 });
上面代碼指定,processPendingAnalyticsEvents必須在未來2秒之內(nèi)執(zhí)行

如果由于超時(shí)導(dǎo)致回調(diào)函數(shù)執(zhí)行,則deadline.timeRemaining()返回0,deadline.didTimeout返回true。

如果多次執(zhí)行window.requestIdleCallback(),指定多個(gè)回調(diào)函數(shù),那么這些回調(diào)函數(shù)將排成一個(gè)隊(duì)列,按照先進(jìn)先出的順序執(zhí)行。

事件

window對象可以接收以下事件。

4.1load 事件和 onload 屬性

load事件發(fā)生在文檔在瀏覽器窗口加載完畢時(shí)。window.onload屬性可以指定這個(gè)事件的回調(diào)函數(shù)

window.onload = function() {
var elements = document.getElementsByClassName("example");
for (var i = 0; i < elements.length; i++) {

var elt = elements[i];
// ...

}
};
上面代碼在網(wǎng)頁加載完畢后,獲取指定元素并進(jìn)行處理。

4.2error 事件和 onerror 屬性

瀏覽器腳本發(fā)生錯(cuò)誤時(shí),會(huì)觸發(fā)window對象的error事件。我們可以通過window.onerror屬性對該事件指定回調(diào)函數(shù)。

window.onerror = function (message, filename, lineno, colno, error) {
console.log("出錯(cuò)了!--> %s", error.stack);
};
由于歷史原因,window的error事件的回調(diào)函數(shù)不接受錯(cuò)誤對象作為參數(shù),而是一共可以接受五個(gè)參數(shù),它們的含義依次如下。

出錯(cuò)信息
出錯(cuò)腳本的網(wǎng)址
行號
列號
錯(cuò)誤對象
老式瀏覽器只支持前三個(gè)參數(shù)

并不是所有的錯(cuò)誤,都會(huì)觸發(fā) JavaScript 的error事件(即讓 JavaScript 報(bào)錯(cuò))。
一般來說,只有 JavaScript 腳本的錯(cuò)誤,才會(huì)觸發(fā)這個(gè)事件,而像資源文件不存在之類的錯(cuò)誤,都不會(huì)觸發(fā)。

下面是一個(gè)例子,如果整個(gè)頁面未捕獲錯(cuò)誤超過3個(gè),就顯示警告。

window.onerror = function(msg, url, line) {
if (onerror.num++ > onerror.max) {

alert("ERROR: " + msg + "
" + url + ":" + line);
return true;

}
}
onerror.max = 3;
onerror.num = 0;
需要注意的是,如果腳本網(wǎng)址與網(wǎng)頁網(wǎng)址不在同一個(gè)域(比如使用了 CDN),瀏覽器根本不會(huì)提供詳細(xì)的出錯(cuò)信息,只會(huì)提示出錯(cuò),錯(cuò)誤類型是“Script error.”,行號為0,其他信息都沒有。這是瀏覽器防止向外部腳本泄漏信息。
一個(gè)解決方法是在腳本所在的服務(wù)器,設(shè)置Access-Control-Allow-Origin的 HTTP 頭信息。
Access-Control-Allow-Origin: *

然后,在網(wǎng)頁的
上面代碼的crossorigin="anonymous"表示,讀取文件不需要身份信息,即不需要 cookie 和 HTTP 認(rèn)證信息。如果設(shè)為crossorigin="use-credentials",就表示瀏覽器會(huì)上傳 cookie 和 HTTP 認(rèn)證信息,同時(shí)還需要服務(wù)器端打開 HTTP 頭信息Access-Control-Allow-Credentials

4.3window 對象的事件監(jiān)聽屬性

除了具備元素節(jié)點(diǎn)都有的 GlobalEventHandlers 接口,window對象還具有以下的事件監(jiān)聽函數(shù)屬性。

window.onafterprint:afterprint事件的監(jiān)聽函數(shù)。
window.onbeforeprint:beforeprint事件的監(jiān)聽函數(shù)。
window.onbeforeunload:beforeunload事件的監(jiān)聽函數(shù)。
window.onhashchange:hashchange事件的監(jiān)聽函數(shù)。
window.onlanguagechange: languagechange的監(jiān)聽函數(shù)。
window.onmessage:message事件的監(jiān)聽函數(shù)。
window.onmessageerror:MessageError事件的監(jiān)聽函數(shù)。
window.onoffline:offline事件的監(jiān)聽函數(shù)。
window.ononline:online事件的監(jiān)聽函數(shù)。
window.onpagehide:pagehide事件的監(jiān)聽函數(shù)。
window.onpageshow:pageshow事件的監(jiān)聽函數(shù)。
window.onpopstate:popstate事件的監(jiān)聽函數(shù)。
window.onstorage:storage事件的監(jiān)聽函數(shù)。
window.onunhandledrejection:未處理的 Promise 對象的reject事件的監(jiān)聽函數(shù)。
window.onunload:unload事件的監(jiān)聽函數(shù)。

5.多窗口操作

由于網(wǎng)頁可以使用iframe元素,嵌入其他網(wǎng)頁,因此一個(gè)網(wǎng)頁之中會(huì)形成多個(gè)窗口。如果子窗口之中又嵌入別的網(wǎng)頁,就會(huì)形成多級窗口。

各個(gè)窗口之中的腳本,可以引用其他窗口。瀏覽器提供了一些特殊變量,用來返回其他窗口。

top:頂層窗口,即最上層的那個(gè)窗口

parent:父窗口

self:當(dāng)前窗口,即自身

與這些變量對應(yīng),瀏覽器還提供一些特殊的窗口名,供window.open()方法、標(biāo)簽、

標(biāo)簽等引用。

_top:頂層窗口
_parent:父窗口
_blank:新窗口
下面代碼就表示在頂層窗口打開鏈接。

Link

5.1.窗口的引用 5.2.iframe 元素 通過元素得到它的window對象

(同源才可)
對于iframe嵌入的窗口,document.getElementById方法可以拿到該窗口的 DOM 節(jié)點(diǎn),然后使用contentWindow屬性獲得iframe節(jié)點(diǎn)包含的window對象。

var f1Element = document.getElementById("f1");
var f1Window = f1Element.contentWindow;

f1Window.frameElement === f1Element // true
window.frameElement === null // true

var frame = document.getElementById("theFrame");
var frameWindow = frame.contentWindow;
上面代碼中,frame.contentWindow可以拿到子窗口的window對象。然后,在滿足同源限制的情況下,可以讀取子窗口內(nèi)部的屬性。

// 獲取子窗口的標(biāo)題
frameWindow.title