一般的JS書里都會在講框架集的時候講top,這會讓人誤解,認為top對象只是代表框架集,其實top的含義應該是說瀏覽器直接包含的那一個頁面對象,也就是說如果你有一個頁面被其他頁面以iframe的方式包含了,無論包含的層級是什么,都可以用top訪問最外層的哪一個頁面,因為這個頁面被瀏覽器直接包含,這個事情的意義在於如果多個頁面被同時加載,他們之間需要通信,就完全可以在最外層的頁面設置一個通信對象,其他頁面都通過這個對象進行通信(需要說明的是,如果要這么干,需要將他們部署在服務器上進行測試,僅僅在文件系統上測試,可能因為跨域而測試失敗)
測試:
chorme瀏覽器,apache2服務器,原生js, index.html包含a.html; a.html包含b.html, b.html包含c.html; c.html通過top對象訪問index.html定義的函數以及頁面元素
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>iframe</title> </head> <body> index.html <div id="panel"></div> <iframe src="a.html"></iframe> <script language="javascript"> function showMessage() { alert("hello") } o = new Object(); o.showMessage = showMessage; </script> </body> </html>
c.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>iframe</title> </head> <body> c.html <input type="button" value="click me" onclick="show()" ></input> <script language="javascript"> function show() { window.top.o.showMessage(); } </script> </body> </html>
top對象是window對象的子對象,如果要訪問頁面元素,可以這樣寫:
function show() { o = window.top.document.getElementById("panel"); o.innerHTML = "hello"; }