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)반대를 할 것입니다.

참고 : default값 window.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.