我可以得到window.document,但我怎樣才能得到document.window?我需要知道如何在所有瀏覽器中執行此操作。如何從Document對象獲取Window對象?
回答
The Window object is the top level object in the JavaScript hierarchy,所以才稱它爲窗口
編輯:前 原來的答覆Promote JS努力。 JavaScript technologies overview在Mozilla開發者網絡上說:
在瀏覽器環境中,這個全局對象是窗口對象。
編輯2: 閱讀作者的評論對他的問題(並獲得downvotes),這似乎與iframe的文檔窗口後。看看window.parent和window.top,並可能比較它們以推斷您的文檔窗口。
if (window.parent != window.top) {
// we're deeper than one down
}
在open()之後,新窗口的'window'是另一個'window',而不是'opener'。如果您從某個函數接收到「文檔」(或任何「節點」),則可能需要原始窗口。 (哇,這是非常古老的。) – Rudie 2013-03-21 18:08:55
您可以document.defaultView
去,如果你確定它是一個窗口,它的好IE 9
是的。請記住,根據規範,'document.defaultView'不必與'window'是同一個對象(事實上,它在一些較老的客戶端中是不同的,例如:Safari 2.x) – kangax 2009-08-27 02:40:35
適用於XUL文檔在Firefox也!謝謝:) – macguru2000 2015-06-26 18:21:55
doc.parentWindow || doc.defaultView,它在舊的IE和Safari – 2017-05-31 12:12:07
好之前跳過微軟的瀏覽器,這是我去解決。它有效,但我討厭它。
getScope : function(element) {
var iframes = top.$$('iframe');
var iframe = iframes.find(function(element, i) {
return top[i.id] ? top[i.id].document == element.ownerDocument : false;
}.bind(this, element));
return iframe ? top[iframe.id] : top;
}
只有IE瀏覽器... – 2009-08-28 17:53:08
什麼是IE瀏覽器只有它?似乎在FF \ Saf \ IE \ Chrome中正常工作。 但是,除了IE之外,它不是必需的,因爲其他瀏覽器都會在正確的範圍內自動擴展元素。 – Joren 2009-08-31 23:15:10
一個跨瀏覽器的解決方案是複雜的,這裏的道場是怎麼做的(從window.js ::得到()):
// In some IE versions (at least 6.0), document.parentWindow does not return a
// reference to the real window object (maybe a copy), so we must fix it as well
// We use IE specific execScript to attach the real window reference to
// document._parentWindow for later use
if(has("ie") && window !== document.parentWindow){
/*
In IE 6, only the variable "window" can be used to connect events (others
may be only copies).
*/
doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
//to prevent memory leak, unset it after use
//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
var win = doc._parentWindow;
doc._parentWindow = null;
return win; // Window
}
return doc.parentWindow || doc.defaultView; // Window
有( 「IE」)返回IE真(和否則爲假)
首先讓我們來清楚。當你使用框架,iframe和多個窗口時,這種事情通常是必要的,所以「窗口就是全局對象」是一個令人不滿意的答案,如果你有一個句柄是另一個窗口的文檔比你所在的地方還要多。
秒,遺憾的是沒有直接獲取窗口對象的方法。有間接的方式。
使用的主要機制是window.name。從某些父窗口創建窗口或框架時,通常可以給它一個唯一的名稱。該窗口內的任何腳本都可以在window.name中獲得。窗口外的任何腳本都可以獲取其所有子窗口的window.name。
要獲得更具體的比那需要更多的信息關於具體情況。但是在任何情況下,子腳本都可以與父腳本進行通信,反之亦然,它們總是可以通過名稱來識別對方,而這通常就足夠了。
- 1. 如何從對象鏈獲取對象
- 2. 如何從CheckboxTreeViewer獲取對象/對象?
- 3. 如何從單獨的URL獲取Document對象?
- 4. 如何使用GWTQuery獲取對Window對象的引用?
- 5. Document對象
- 6. JavaScript window對象
- 7. 如何獲取對象內的對象?
- 8. Document對象的JavaScript
- 9. 獲取從對象
- 10. 獲取從對象
- 11. 獲取從對象
- 12. 獲取從對象
- 13. 獲取從對象
- 14. 獲取從對象
- 15. 獲取從對象
- 16. 獲取從對象
- 17. WindowProxy和Window對象?
- 18. 在JSON對象中選擇#document對象
- 19. 從對象中獲取對象名稱
- 20. 從對象獲取對象的鍵值
- 21. 從對象數組中獲取對象
- 22. 從其他對象中獲取對象
- 23. Xcode從頂層對象獲取對象
- 24. 從對象內獲取父對象
- 25. 如何在GWT中獲取HTMLIFrameElement的Document對象
- 26. 給定一個HtmlUnit HtmlPage對象,如何獲取其Document的URI?
- 27. 獲取[對象XrayWrapper [對象HTMLDivElement]]對象
- 28. 如何獲取WPF中的頂級對象(Window或Page)?
- 29. 如何從Capybara :: Session對象獲取頁面對象
- 30. Node.js髒如何從[對象對象]中獲取數據?
敢問我爲什麼?窗口是一個始終可用的對象,並且窗口中總是不會超過1個文檔,可以說是1-1關係... – Colin 2009-08-27 00:10:50
因爲我在多個iframe中使用原型,並且各種Element方法在IE中斷裂或Safari如果元素以某種方式在錯誤的範圍內擴展。我已經修改了一些東西來解決原型中的這個問題,但修復程序的一部分需要我找到一個元素所在的窗口。 – Joren 2009-08-27 18:19:44
@Joren,請考慮更改爲接受的答案。 – kay 2016-02-09 15:41:27