Como faço para obter o objeto de janela do objeto documento?

votos
46

Posso obter window.document mas como posso obter document.window? Eu preciso saber como fazê-lo em todos os navegadores.

Publicado 27/08/2009 em 01:06
fonte usuário
Em outras línguas...                            


6 respostas

votos
79

Você pode ir com document.defaultViewse você tem certeza sua janela e sua aprovação para pular navegadores da Microsoft antes IE 9.

Respondeu 27/08/2009 em 02:50
fonte usuário

votos
17

Uma solução cross browser é complicado, aqui está como dojo faz isso (a partir 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

tem ( "ie") retorna true para IE (e falso caso contrário)

Respondeu 21/04/2012 em 17:08
fonte usuário

votos
3

Bem, esta é a solução que eu fui com. Ele funciona, mas eu odeio isso.

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;
}   
Respondeu 28/08/2009 em 18:44
fonte usuário

votos
0

I optou por injetar o DOCUMENTtoken @angular/platform-browser:

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

e, em seguida, acessar o pai:

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

public ngOnInit() {
  // this.document.defaultView || this.document.parentWindow;
}
Respondeu 25/04/2018 em 13:14
fonte usuário

votos
0

Primeiro, vamos ser claros. esse tipo de coisa muitas vezes é necessário quando você está trabalhando com frames, iframes, e várias janelas, e assim "a janela é apenas o objeto global" é uma resposta insatisfatória, se tudo que você tem uma alça para um documento a partir de uma outra janela que o uma em que está.

segundo, infelizmente, não há direta maneira de obter o objeto janela. existem maneiras indiretas.

o mecanismo primário para usar é window.name. ao criar uma janela ou um quadro de alguma janela pai, geralmente você pode dar-lhe um nome único. quaisquer scripts dentro dessa janela pode chegar a window.name. quaisquer scripts fora da janela pode obter no window.name de todas as suas janelas filho.

para ser mais específico do que isso requer mais informação sobre a situação específica. no entanto, em qualquer situação em que os scripts criança pode se comunicar com scripts controladoras ou vice-versa, eles sempre podem identificar uns aos outros pelo nome, e este é geralmente suficiente.

Respondeu 06/06/2013 em 02:18
fonte usuário

votos
-2

O objeto Window é o objeto de nível superior na hierarquia de JavaScript , por isso só se referem a ele como a janela

Edit: Resposta original antes Promover JS esforço. Overview tecnologias JavaScript no Mozilla Developer Network diz:

Em um ambiente de navegador, este objeto global é o objeto janela.

Edit 2: Depois de ler o comentário do autor à sua pergunta (e recebendo downvotes), este parece estar relacionada com a janela de documento do iframe. Dê uma olhada em WINDOW.PARENT e window.top e talvez compará-los para inferir sua janela documento.

if (window.parent != window.top) {
  // we're deeper than one down
}
Respondeu 27/08/2009 em 01:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more