Чи слід використовувати window.navigate або document.location в JavaScript?


177

Який бажаний метод використовувати для зміни розташування поточної веб-сторінки за допомогою JavaScript? Я бачив використовувані і window.navigate, і document.location. Чи є якісь відмінності в поведінці? Чи є відмінності в реалізаціях браузера?

Відповіді:


220
window.location.href = 'URL';

- це стандартна реалізація для зміни місцезнаходження поточного вікна.


22
Чи є у вас посилання, яке вказує на те, що window.location.href є стандартною реалізацією? І чи застосовується цей стандарт однаково добре для всіх браузерів? Ви, звичайно, здаєтеся обізнаним, і 15+ голосів (плюс прийнята відповідь) допомагають зробити його більш авторитетним, хоча, я думаю, було б краще переглянути документацію від команд розробників браузера, щоб створити резервну скаргу.
Goyuix

6
@Goyuix, мабуть, точніше сказати, що window.location.hrefце повна реалізація, але window.locationвиконує те саме. Див. Docs.sun.com/source/816-6408-10/location.htm : "Якщо ви присвоїте рядок locationвластивості об'єкта, JavaScript створює locationоб'єкт і присвоює цей рядок його hrefвластивості."
Джеймс Скідмор

3
Схоже, ці хлопці вирішили, що це особисті переваги: developer.mozilla.org/Talk:en/DOM/window.location . Або подивіться приклад внизу, вони використовуються лише в тій самій частині, window.locationале це не обов'язково вказує жоден спосіб: developer.mozilla.org/en/window.location .
Джеймс Скідмор

1
В даний час я використовую це для розробки Android. У мене виникають проблеми з перенаправленням сторінки з JS у веб-переглядачі за замовчуванням Androids. Я спробував, window.location.href = 'URL';а також window.location.assign('URL');метод, який призначений для перезавантаження нової сторінки. Більше інформації можна знайти на w3schools.com/jsref/obj_location.asp
philipp

3
window.navigate- це власницький метод, який використовується Internet Explorer (я зауважу, впевнений, чи інші веб-переглядачі імітують його на сумісність, Chrome це не робить). document.locationабо window.locationє стандартними об'єктами (див. різні специфікації HTML / HTML5 / DOM). document.location = someURL(або window.location = someURL), ймовірно, підтримується завдяки застарілому коду. Правильний спосіб це зробити document.location.href = someURL, чи, можливо document.location.assign(someURL).
PhistucK

11

window.navigate не підтримується в якомусь браузері

У сценарії java існує багато способів перенаправлення, дивіться нижче код та пояснення

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href завантажує сторінку з кеша браузера і не завжди надсилає запит на сервер. Отже, якщо у кеші доступна стара версія сторінки, вона переадресує туди замість завантаження свіжої сторінки з сервера.

метод window.location.assign () для перенаправлення, якщо ви хочете дозволити користувачеві використовувати кнопку "назад", щоб повернутися до вихідного документа.

метод window.location.replace (), якщо ви хочете переспрямувати на нову сторінку і не дозволяти користувачеві переходити до вихідної сторінки за допомогою кнопки "назад".


7

document.locatio n - застаріле, але все ще присутнє) рядкове властивість лише для читання, замінене document.url .


6

window.location також впливає на кадр,

найкраща форма, яку я знайшов, це:

parent.window.location.href

І гірше:

parent.document.URL 

Я зробив масовий тест браузера, і деякі рідкісні IE з кількома плагінами не визначилися з другою формою.


За цією логікою, чи не все-таки краще bi.window.location.href?
Орвелофіл

6

window.locationвплине на ціль вашого браузера. розташування document.location вплине лише на ваш веб-переглядач та фрейм / рамку.


4

window.navigateНЕ підтримується в деяких браузерах, тому цього слід уникати. Будь-який з інших методів, що використовують властивість локації, є найбільш надійним і послідовним підходом


2

Я б пішов з window.location = "http://...";. Я кодував крос-браузерний JavaScript протягом декількох років, і ніколи не відчував проблем із використанням цього підходу.

window.navigateі window.location.hrefздається мені трохи дивним.


13
window.location працює, але технічно неправильно, оскільки "location" є об'єктом.
Джеймс Скідмор

16
Але все в JavaScript - це об’єкт :)
cllpse

1
Хоча майже все є об’єктом у JavaScript, призначаючи рядок об'єкту, як правило, не встановлює значення одному з його властивостей (як window.location або document.location роблять зі своїм властивістю href), а замість цього об'єкт замінює рядок. У цьому випадку додано вигадку веб-переглядача, щоб бути сумісним з існуючими (химерними) реалізаціями та застарілим (і не таким уже застарілим) вмістом.
PhistucK

1

Дійсно немає різниці; існує близько 5 різних методів цього. Тим НЕ менше, ті , які я бачу найбільш часто document.locationі window.locationтому , що вони підтримуються всіма основними браузерами. (Я особисто ніколи не бачив window.navigate, щоб він використовувався у виробничому коді, тому, можливо, він не має дуже гарної підтримки?)


розташування document.location працює не у всіх браузерах. window.location робить.
Філіп Лейбаерт

2
Firefox не підтримує window.navigate
Ендрю Гаррі


-5

Ви можете перемістити свою сторінку за допомогою

window.location.href =Url;

3
Це насправді не додає більше інформації, аніж прийнятої, і примножує сприйняту відповідь ...
Stuart Siegler

3
Ви можете навіть піти далі і стверджувати, що ви просто розсипали прийняту відповідь
Ліам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.