window.location.href = window.location.href와 window.location.reload ()의 차이점


196

JavaScript의 차이점은 무엇입니까

window.location.href = window.location.href

window.location.reload()

기능?

답변:


247

올바르게 기억 하면 POST 데이터를 포함하지 않고 window.location.reload()POST 데이터로 현재 페이지를 다시로드하십시오 window.location.href=window.location.href.

아래 주석에서 @ W3Max가 언급 한 것처럼 window.location.href=window.location.hrefURL에 앵커 (#)가 있으면 페이지를 다시로드하지 않습니다 window.location.reload().이 경우에 사용해야합니다 .

또한 아래 @Mic에서 언급했듯이 브라우저 를 사용 하면 캐시를 건너 뛰고 서버에서 페이지를 다시로드 할 수 있도록 window.location.reload()추가 인수를 취 합니다. 반대를 수행하고 가능한 경우 캐시에서 페이지를로드합니다.skipCachewindow.location.reload(true)window.location.reload(false)


11
POST에서 window.location.reload ()를 사용하면 브라우저가 페이지를 다시로드하기 위해 데이터를 다시 보낼 것인지 묻습니다
wimh

3
@Wimmel,이 메시지를 비활성화하는 방법이 있습니까?
Kris-I

40
URL에 앵커 (#)가 있으면 window.location.href = window.location.href는 페이지를 다시로드하지 않습니다.이 경우 window.location.reload ()를 사용해야합니다.
W3Max

5
또한 location.reload ()는 모든 정적 컨텐츠 (Ctrl + f5 스타일 하드 새로 고침과 유사)를 강제로 다시로드하지만 location.href를 href (또는 경로 이름 또는 URL)로 다시 설정하면 중요하지 않으며 (및 불필요) 일부 페이지의로드 시간 차이
Rob Van Dam

2
@Wimmel Chrome : GET Firefox로 페이지를 다시로드합니다. 이전 요청을 다시 실행합니다. 즉, POST 인 경우 데이터를 다시 보낼지 여부를 묻는 멋진 팝업이 표시됩니다.
Juri

51

window.location.reload(true)브라우저가 캐시를 건너 뛰고 서버에서 페이지를 다시로드 한다고 말합니다 . window.location.reload(false)반대를 할 것입니다.

참고 : defaultwindow.location.reload()false


5
@Ismail-기본값은 false입니다.
Trevor

2
Chrome 32에서 webRTC를 사용하는 동안 true / false가 효과가 없었습니다. 나는 webRTC와 iframe을 가지고 있었고 window.location.href = window.location.href트릭을 사용 했다.

당신이 페이지의 형태를 변경 한 경우, 변경 사항이 있습니다 사용하는 경우 브라우저에 따라 (캐시 값으로 되돌리기) 사라 location.reload()또는 location.reload(false). 페이지를 완전히 새로 고치려면을 사용하십시오 location.reload(true).
Suncat2000

32

차이점은

window.location = document.URL;

URL에 해시 (#)가 있으면 (페이지 뒤에 무언가가 있거나없는 경우) 페이지를 다시로드하지 않지만

window.location.reload();

페이지를 새로 고침합니다.


2
모든 브라우저에 종료 문제가있는 것은 아닙니다. 종료 해시가 문제가되는 경우 다음을 시도하십시오. window.location = document.URL.replace (/ # $ /, '');
Walter Stabosz

1
적어도 크롬이 걱정됩니다. 나는 location.href = location.href당연한 것으로 여겨졌지만 방금 정확한 행동을 발견하고 단어를 전파하기 위해 그렇게했습니다. 그냥 사용하는 location.reload()대신.
Pioul

1
이러한 정규식을 작성하는 대신 window.location.pathname을 사용할 수도 있습니다. 예를 들면 :window.location.replace(window.location.pathname);
Arseny

20

부울 true를 다시로드에 추가하면 window.location.reload(true)서버에서로드됩니다.

이 부울이 어떻게 지원되는지는 확실하지 않습니다. W3Org 는 NS가 그것을 지원 하는 데 사용 했다고 언급 했습니다.

window.location.href와 document.URL 의 내용에 차이가있을 수 있습니다 -최소한 location.href와 비표준 및 더 이상 사용되지 않는 document.location 사이에 차이가 있었지만 리디렉션과 관련이 있었지만 정말 마지막 천년입니다.

문서화 목적으로 window.location.reload ()를 사용 하고 싶습니다.


차이점 에 대해서는 stackoverflow.com/a/5091619/429972를 참조 하십시오.
jontro

14

언급했듯이 URL에 해시 (#)가있을 때 href를 수정하면 페이지가 다시로드되지 않습니다. 따라서 정규 표현식 대신 이것을 사용하여 다시로드합니다.

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}

6

이 질문을 통해 IE의 비정상적인 동작, 특히 IE9가 이전 버전을 확인하지 않은 것으로 나타났습니다. 그것은 보인다

window.location.reload();

새로 고침으로 인해 전체 화면이 1 초 동안 비워집니다.

 window.location = document.URL;

거의 눈에 띄지 않게 페이지를 훨씬 빠르게 새로 고칩니다.

좀 더 많은 연구와 피들러 실험을 window.location.reload()하면 부울을 전달했는지 여부에 관계없이 캐시를 무시하고 서버에서 다시로드 하는 것으로 보입니다. 여기에는 모든 자산 (이미지, 스크립트, 스타일 시트, 등) 다시. 따라서 페이지에서 HTML을 새로 고치려면 window.location = document.URL트래픽이 적고 훨씬 더 빠르게 반환됩니다.

브라우저 간 동작의 차이점은 IE9가 reload 메소드를 사용할 때 보이는 페이지를 지우고 처음부터 다시 작성하는 것처럼 보입니다 .FF와 크롬은 새 자산을 얻을 때까지 기다렸다가 다른 경우 다시 작성합니다.


window.location = document.URL은 window.location.reload ()와 같이 페이지를 다시로드합니다. 맨 위로 스크롤하지 않고 말 그대로 이해할 수있는 최신 기술이 있습니까?
bigmugcup

6

Firefox (12.0)의 차이점은 POST에서 렌더링 된 페이지에서 reload ()가 경고를 표시하고 다시 게시하는 반면 URL 할당은 GET을 수행한다는 것입니다.

Chrome은 두 가지 모두에 대해 GET을 수행합니다.


1
Chrome 38은 이제 .reload ()에 POST를 사용하는 것 같습니다.
Glen Little

3

JSF를 사용하여 세션이 만료 된 후 새로 고침에 문제가 있습니다. 페이지를 다시로드 한 후 PrimeFaces ViewExpiredException 및 일부 조사를 통해 FireFox에서 한 가지 차이점을 발견했습니다.

전화 window.location.reload()는 FF에서 새로 고침 아이콘을 클릭하는 것과 같이 작동합니다.

Cache-Control max-age=0

window.location.hrefURL 행에서 ENTER를 누르는 것과 같이 설정하는 동안 해당 행을 보내지 않습니다.

둘 다 GET으로 보내지지만 첫 번째 (재로드)는 이전 데이터를 복원하고 있으며 응용 프로그램이 일관성이없는 상태입니다.


1

아니요, 없어야합니다. 그러나 일부 브라우저에는 차이가있을 수 있으므로 어떤 경우에는 작동하지 않을 수도 있습니다.


1

약 3 년 동안의 경험에서 나는 어떤 차이도 찾을 수 없었습니다 ...

편집 : 예, 여기 중 하나에서 말했듯이 부울 매개 변수를 window.location.reload ()에 전달하는 것만 다릅니다. true 를 전달 하면 브라우저가 새로운 페이지를로드하지만 false 이면 캐시 버전이로드됩니다 ...


0

우리의 경우 웹뷰에서 페이지를 새로 고침하고 어떤 이유로 우리는 이유를 알 수 없었습니다! 우리는 웹에 있었지만 location.reload () 또는 window.location.reload (), location.reload (true), ...와 같은 대체 솔루션을 사용하여 다시로드하지 않고 거의 모든 솔루션을 시도합니다!

간단한 해결책은 다음과 같습니다.

빈 "href"속성 값이있는 <a> 태그를 다음과 같이 사용하십시오.

< a href="" ...>Click Me</a>

(어떤 경우에는 타겟을 클릭 할 때 "return true"를 사용하여 다시로드를 트리거해야합니다)

자세한 내용 다음 질문을 확인하십시오 . 빈 href가 유효합니까?


-3

window.location.href, 이것은 안드로이드 5.1에서 webview에 생명을 구했습니다. Android에서이 버전의 location.reload ()로 페이지가 다시로드되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.