문제

IE7(내부 웹 사이트)에서만 실행되는 asp.net 응용 프로그램이 있습니다.

사용자가 데이터를 입력해야 할 때 양식이 포함된 하위 창을 표시합니다.양식이 닫히면 javascript:window.opener.location.reload(true)를 호출하여 새 데이터가 기본 페이지에 표시됩니다.

문제는 브라우저가 페이지를 다시 게시해야 한다고 불평한다는 것입니다.이 기능을 끄는 방법이 있나요?

도움이 되었습니까?

해결책

Window.opener의 페이지가 게시물 요청에서 나오기 때문일 수 있습니다.POST 없이 데이터를 가져올 수 있는 경우 GET 요청만 수행합니다.

다른 팁

아니요, 하지만 해결책이 있습니다.일반적으로 누군가가 페이지에 데이터를 게시한 후 즉시 302 리디렉션을 사용하는 것이 좋은 디자인으로 간주됩니다.이렇게 하면 해당 팝업이 발생하는 것을 방지할 수 있습니다.자세히 설명하겠습니다.

1) 사용자가 양식을 작성하고 POST를 통해 데이터를 제출합니다.

2) 백엔드는 데이터를 수신하고 이에 따라 조치를 취합니다.

3) 백엔드는 사용자에게 콘텐츠를 반환하는 대신 페이지 처리가 완료되자마자 302 리디렉션을 실행합니다(필요한 경우 사용자를 정확히 동일한 URL로 다시 리디렉션할 수도 있음).

4) 사용자에게 표시되는 페이지는 브라우저에 리디렉션을 요청한 페이지입니다.표준 GET 요청을 사용하여 리디렉션된 페이지를 로드합니다.페이지를 새로 고치려고 해도 데이터가 다시 게시되지 않습니다.문제 해결됨.

이는 ASP.NET의 일반적인 "포스트백" 방식에 문제가 있습니다.이 경고 없이 페이지를 다시 로드해야 하는 경우 이 페이지는 POST가 아닌 GET에서 나와야 합니다.Response.Redirect("...")를 직접 수행할 수 있습니다.그러나 이렇게 하면 viewstate의 사용이 중단됩니다.

asp.net mvc는 이 문제를 해결합니다. 이는 ie7만의 문제가 아니라 대부분의 브라우저의 보안 기능입니다.전체 페이지를 다시 로드하는 대신 js를 사용하여 기본 양식의 콘텐츠를 업데이트할 수 있다는 점을 제외하면 내가 아는 수정 사항은 없습니다.

나는 그렇게 할 수 있는 방법이 있다고 믿지 않습니다.대신, 다시 로드하지 않고 상위 창을 페이지로 연결하는 것은 어떨까요?

javascript:window.opener.location='귀하의 URL'

AFAIK는 스크립트를 통하지 않습니다.

다음을 시도해 볼 수도 있습니다.

window.opener.location = '#';

브라우저 재게시를 우회해야 합니다.그리고 필요에 따라 해시 이름을 조정할 수 있습니다.

페이지 1에서 페이지 2로 이동하고 브라우저가 페이지 1로 돌아가는 것을 비활성화하려면 페이지 1의 상단에 다음을 추가하세요.

<script>
if(window.history.forward(1) != null)
                 window.history.forward(1);
</script>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top