Qual é a diferença entre window.location e document.location em JavaScript?

Ambos devem referenciar o mesmo object?

    De acordo com o W3C, eles são os mesmos. Na realidade, para segurança entre navegadores, você deve usar window.location vez de document.location .

    Consulte: http://www.w3.org/TR/html/browsers.html#dom-location

    A maneira canônica de obter o object de localização atual é window.location (consulte esta página do MSDN de 1996 e o rascunho do W3C de 2006 ).

    Compare isso com document.location , que originalmente retornava apenas o URL atual como uma string (consulte esta página no MSDN ). Provavelmente para evitar confusão, document.location foi substituído por document.URL (veja aqui no MSDN ), que também faz parte do DOM Nível 1 .

    Tanto quanto eu sei, todos os navegadores modernos mapear document.location para window.location , mas eu ainda prefiro window.location como isso é o que eu usei desde que eu escrevi meu primeiro DHTML.

    window.location é leitura / gravação em todos os navegadores compatíveis.

    document.location é somente leitura no Internet Explorer (pelo menos), mas lê / escreve em navegadores baseados no Gecko (Firefox, SeaMonkey).

    document.location era originalmente uma propriedade somente leitura, embora os navegadores Gecko também lhe permitam atribuí-lo. Para a segurança entre navegadores, use window.location .

    Consulte Mais informação:

    document.location

    window.location

    Curiosamente, se você tiver um quadro, imagem ou formulário chamado ‘local’, ‘document.location’ fornecerá uma referência à janela, imagem ou formulário do quadro, respectivamente, em vez do object Local. Aparentemente, isso ocorre porque a pesquisa de nome de coleção document.forms, document.images e window.frames obtém prioridade sobre o mapeamento para window.location.

      if (document.location.tagName == 'IMG') alert('Hello!') 

    Tanto quanto eu sei, ambos são iguais. Para segurança entre navegadores, você pode usar window.location vez de document.location .

    Todos os navegadores modernos mapeiam document.location para window.location , mas eu ainda prefiro o window.location pois é isso que eu uso desde que escrevi minha primeira página da web. é mais consistente.

    você também pode ver document.location === window.location retorna true , o que esclarece que ambos são iguais.

    document.location === window.location retorna true

    Além disso

    document.location.constructor === window.location.constructor é true

    Nota: Apenas testado, Firefox 3.6, Opera 10 e IE6

    Sim, eles são iguais. É uma das muitas peculiaridades históricas na API JS do navegador. Tente fazer:

     window.location === document.location 

    window.location é o mais confiável dos dois, considerando os navegadores mais antigos.

    Eu diria que window.location é a maneira mais confiável de obter o URL atual. A seguir está a diferença entre o window.location e o document.url que vieram na frente em um dos cenários em que eu estava anexando parâmetros de hash no URL e lendo-o mais tarde.

    Depois de adicionar parâmetros hash no URL.

    Em um navegador mais antigo, não consegui obter os parâmetros de hash da URL usando document.url , mas quando usei window.location , consegui obter os parâmetros de hash da URL.

    Por isso, é sempre melhor usar window.location .

    document.location.constructor === window.location.constructor é true .

    É porque é exatamente o mesmo object que você pode ver em document.location===window.location .

    Portanto, não há necessidade de comparar o construtor ou qualquer outra propriedade.

    Pelo menos no IE, tem uma pequena diferença no arquivo local:

    document.URL retornará “file: // C: \ projects \ abc \ a.html”

    mas window.location.href retornará “file: /// C: /projects/abc/a.html”

    Uma é a barra invertida, uma é a barra invertida.

    Bem, sim, eles são os mesmos, mas ….!

    window.location não está funcionando em alguns navegadores do Internet Explorer.

    É raro ver a diferença hoje em dia porque o html 5 não suporta mais framesets. Mas, na época em que temos o frameset, o document.location redirecionava apenas o quadro no qual o código está sendo executado e window.location redirecionava a página inteira.

    Na verdade, eu noto uma diferença no cromo entre os dois, por exemplo, se você quiser fazer uma navegação para um quadro de sandbox de um quadro filho, então você pode fazer isso apenas com document.location mas não com window.location

    Apesar de a maioria das pessoas recomendar aqui, é assim que o protocolo dynamic do Google Analytics é cortado por muito tempo (antes de passarem do ga.js para o analytics.js recentemente):

     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 

    Mais informações: https://developers.google.com/analytics/devguides/collection/gajs/

    Na nova versão eles usaram ‘//’ para que o navegador possa adicionar automaticamente o protocolo:

     '//www.google-analytics.com/analytics.js' 

    Portanto, se o Google preferir document.location a window.location quando precisar de protocolo no JS, acho que eles têm alguns motivos para isso.

    GERAL : Eu pessoalmente acredito que document.location e window.location são os mesmos, mas se for gigante com maiores statistics sobre o uso de navegadores como o Google usando document.location , eu recomendo segui-los.