作為window物件屬性的元素 多視窗和窗體

2022-09-09 01:15:14 字數 3654 閱讀 6837

如果html文件中用id屬性為元素命名。並且如果 window物件沒有此名字的屬性,則window物件會賦予乙個屬性,其名字為id屬性的值,其值指向該元素

html

控制台

window.ming;

由於window物件是作用域鏈的最頂層,即id屬性為指令碼訪問的全域性變數。如上方的,可以通過變數ming來達到引用此元素的目的。其中button為乙個按鈕

但是如果window物件已經具有此名字的屬性。不會發生上述情況,因為id已經被占用。

如果在**中宣告並賦值給全域性變數x,那麼顯示宣告會隱藏隱式宣告的元素變數。如果指令碼中的變數宣告出現在命名元素之前,那麼變數的存在會阻止元素獲取它的window屬性。如果指令碼中的變數宣告出現在命名元素之後,那麼變數的顯式會覆蓋屬性的隱式值。即,顯示的是顯式的宣告。

舉乙個查詢元素id的例子

var ui = ["input", "prompt", "heading"];

ui.foreach((id) => );

html

1111111

1111

好吧,因為瀏覽器廠商可以隨便給加屬性,導致很容易出現顯式和隱式的問題。所以呢,一般不用,並且輸出的結果,全是null,沒有該id。

為什麼呢。因為script指令碼在頭部先進行載入,無法獲得完整的dom樹,導致dom樹獲取全為空值,因為在處理js指令碼的時候,dom樹渲染是阻塞的,除非允許非同步渲染,載入完成以後進行渲染,或者是非同步的隨機渲染。

window.prompt
因為window物件存在該屬性,導致會出現遍歷的失敗

給乙個id進行查詢

var $ = (id) => ;

var ui = {};

ui.prompt = $('prompt');

console.log(ui);

乙個web瀏覽器有多個標籤,每乙個標籤頁都是乙個獨立的瀏覽上下文(即,每乙個獨立的標籤都是乙個執行緒,有些時候,瀏覽器會進行執行緒的合併)。每乙個標籤頁都有乙個獨立的window物件。而且相互之間不干擾。每個標籤頁中執行的指令碼通常並不知道其他便簽頁的存在。更不會和其他標籤頁的window物件進行互動操作或者操作其文件內容。

視窗和其他視窗並不是沒有完全的關係。乙個視窗或標籤頁中的指令碼可以開啟新的視窗或者標籤頁。當乙個指令碼這樣做,多個視窗可以相互操作

已經處於半廢棄的inframe標籤。挺無奈的,已經快廢了。

不過學習還是學習一下吧

iframe是用來巢狀多個文件的。由iframe所建立的巢狀瀏覽上下文是用自己的window物件表示的。每乙個iframe都是乙個獨立的window物件。

對於客戶端js來說,視窗,標籤頁,iframe和框架都是瀏覽上下文。對於js來說都是window物件。和獨立的不同之處在於,js指令碼能夠看到其祖先和子孫

使用window的open可以開啟乙個新的標籤頁

window.open將會載入指定的url到新的或者已經存在的視窗中(取決於如何設定)。並返回代表那個視窗的window物件。

open()第乙個引數會在新視窗中顯示文件的url,如果引數省,或為空,將會使用空白頁面進行顯示

about:blank
指令碼無法通過簡單的猜測視窗的名字來操縱視窗的web應用。只有設定了允許導航的頁面才可以。

即,當且僅當視窗包含的文件來自相同的源,或者這個指令碼開啟的哪個視窗。(或者遞迴開啟的視窗),指令碼才能通過名字指定存在的視窗,或者如果是乙個視窗內嵌在另乙個視窗裡的窗體,那麼在它們的指令碼之間可以相互導航。使用

_top(頂級祖先視窗)

_parent(直接父級視窗)
來獲取上下文。

視窗名字

視窗名字,執行open()方法引用已存在的視窗。並同時可以作為標籤a和標籤form的taget的值,表示載入到哪

open第三個引數表明如何開啟這個標籤的,以及大小(一般彈窗廣告喜歡這樣做)

// 開啟允許改變大小的瀏覽器的視窗,包含位址列,工具欄和位址列

var w = window.open("", "smallwin", "windth=200, height=350, statue=yes");

在新的視窗中執行

window.name

"smallwin"

第四個引數只在第二個引數命名的時候有用,是在當前(原先)視窗是替換掉歷史記錄,還是新建乙個歷史記錄,預設是後者,因為要指定名稱,才會在歷史記錄中儲存

var w = window.open();

w.alert('about to visit ') // 在新的視窗呼叫alert()方法

w.location = "" // 設定視窗的location,完成頁面的跳轉

w儲存的是跳轉網頁的window物件的值

如果已經使用open()開啟視窗,同樣可以用close()關閉其視窗

w.close();

undefined

這樣可以將w開的視窗將其關閉

如果要關閉本視窗可以呼叫

close()
這樣就完成了頁面的關閉

即使乙個視窗已經關閉了,那麼其window物件仍舊儲存在其父視窗,直到父視窗關閉,window物件徹底的消失。其closed的值為true,並且document的值為null,其方法也不能使用

window物件的方法open()可以開啟並建立乙個新的window物件(即建立乙個新的視窗)並且該視窗是具有opener屬性,根據該屬性,可以開啟其原始視窗。

即,通過這樣兩個視窗可以實現相互引用。或者呼叫對方的方法。

如果乙個視窗是頂級視窗,標籤

parent == self

true

self 屬性返回窗體本身,表明parent指向其窗體

如果乙個窗體是在另外乙個窗體之中,則parent.parent將會是頂級視窗。不管其巢狀了多少層,包括使用top屬性指向的都是最頂層視窗。

如果window本身就是頂層視窗,則top就是其視窗本身。其top就是parent

每個視窗窗體都是js的執行上下文。以window物件作為全域性物件,這樣的話,乙個視窗窗體中的**可以應用到其他視窗或者窗體(並且同源策略沒有進行阻止)。那麼他們之間可以完成互動。

好啦,不在過多解釋,畢竟這個已經沒有什麼用的了

window物件是客戶端js的全域性變數,但是從技術上不是,web瀏覽器每次向視窗或者窗體載入新的內容的時候,都是開始乙個新的js執行上下文,包含乙個新建立的全域性物件。事實上,全域性物件會在視窗或窗體載入新內容時被替換,即window物件實際不是全域性物件,是乙個**,即windowproxy

ps 需要注意一點的是在多個標籤或者窗體的時候,每個窗體僅僅為乙個執行緒,執行緒之間使用的是乙個瀏覽器定義好的api 即 window.localstorage 或者是 cookie 加 輪詢達到多個標籤之間的通訊的目的。

www.iming.info

bom元素window物件

一 bom元素操作的物件 windows location history 1.window 整個js中的頂級物件,1 全域性變數是window的屬性 var res 1 console.log window.res 輸出值為1 2 全域性函式是window的物件方法 整個瀏覽器的高寬,值不固定不變...

window物件的屬性及方法

1.自定義函式 有參函式和無參函式 function 函式名 引數1,引數2,引數3 2.呼叫函式 事件名 函式名 3.匿名函式沒有函式名 4.變數的作用域 根據變數作用範圍不同,可分為全域性變數和區域性變數 5.window物件是整個bom的核心 6.bom可實現的功能 彈出新的瀏覽器視窗 移動 ...

結構體作為物件的屬性

結構體作為物件的屬性 結構體如何開闢儲存空間 結構體分配儲存空間是將所有屬性占用的儲存空間的總和加在一起後再分配 注意 其實結構體分配儲存空間本質上並不是將所有屬性占用的儲存空間的總和加在一起後再分配 而是會獲取結構體型別中占用記憶體最大的屬性的大小,然後取該大小的倍數 特例 如果剩餘的儲存空間 不...