How do I get the Window object from the Document object?

JavascriptHtmlDocument

Javascript Problem Overview


I can get window.document but how can I get document.window? I need to know how to do this in all browsers.

Javascript Solutions


Solution 1 - Javascript

You can go with document.defaultView if you’re sure its a window and its okay to skip Microsoft browsers before IE 9.

Solution 2 - Javascript

A cross browser solution is complicated, here's how dojo does it (from window.js::get()):

// 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

has("ie") returns true for IE (and false otherwise)

Solution 3 - Javascript

Well, this is the solution I went with. It works, but I hate it.

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;
}	

Solution 4 - Javascript

I opted to inject the DOCUMENT token from @angular/platform-browser:

import { DOCUMENT } from '@angular/platform-browser'

and then access the parent:

constructor(@Inject(DOCUMENT) private document: any) {
}

public ngOnInit() {
  // this.document.defaultView || this.document.parentWindow;
}

Solution 5 - Javascript

first off let's be clear. this sort of thing is often necessary when you are working with frames, iframes, and multiple windows, and so "the window is just the global object" is an unsatisfying answer if all you have a handle to is a document from another window than the one you are in.

second, unfortunately there is no direct way of getting at the window object. there are indirect ways.

the primary mechanism to use is window.name. when creating a window or a frame from some parent window, you can usually give it a unique name. any scripts inside that window can get at window.name. any scripts outside the window can get at the window.name of all its child windows.

to get more specific than that requires more info about the specific situation. however in any situation where the child scripts can communicate with parent scripts or vice versa, they can always identify each other by name, and this is usually enough.

Solution 6 - Javascript

The Window object is the top level object in the JavaScript hierarchy, so just refer to it as window

Edit: Original answer before Promote JS effort. JavaScript technologies overview on Mozilla Developer Network says:

> In a browser environment, this global object is the window object.

Edit 2: After reading the author's comment to his question (and getting downvotes), this seems to be related to the iframe's document window. Take a look at window.parent and window.top and maybe compare them to infer your document window.

if (window.parent != window.top) {
  // we're deeper than one down
}
 

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJorenView Question on Stackoverflow
Solution 1 - JavascriptkennebecView Answer on Stackoverflow
Solution 2 - JavascriptBill KeeseView Answer on Stackoverflow
Solution 3 - JavascriptJorenView Answer on Stackoverflow
Solution 4 - JavascriptJackView Answer on Stackoverflow
Solution 5 - JavascriptBretonView Answer on Stackoverflow
Solution 6 - JavascriptKevin HakansonView Answer on Stackoverflow