code

브라우저 백은 페이지 자체보다 먼저 중첩된 iframe에 대해 작동합니다. 이를 피할 수 있는 방법이 있습니까?

starcafe 2023. 3. 4. 15:03
반응형

브라우저 백은 페이지 자체보다 먼저 중첩된 iframe에 대해 작동합니다. 이를 피할 수 있는 방법이 있습니까?

동적 데이터가 로드된 페이지와 많은 javascript가 있습니다.

페이지에는 사용자가 선택할 수 있는 목록이 포함되어 있으며 선택한 각 값은 새 데이터를 페이지에 로드합니다.

이러한 데이터 항목 중 하나는 iframe에 제공된 URL입니다.

jQuery BBQ: Back Button & Query Library를 사용하여 브라우저 백 동작을 시뮬레이트합니다.

처음 뒤로 버튼을 클릭했을 때 iframe이 이전 위치로 돌아간 후 다시 클릭해야 페이지가 되돌아갈 수 있다는 것 외에는 모두 정상적으로 작동합니다.

iframe의 등 동작을 비활성화하는 방법이 있나요?

다른 사람들에게 도움이 될 수 있을 것 같은 내 문제에 대한 답을 찾았어요.

문제는 새로운 URL을 Iframe에 할당하는 방법에 있었습니다.Jquery를 사용하여 다음과 같이 되어 있었습니다.

$('#myIFrame').attr('src',newUrl);

이러한 방법으로 URL을 할당하면 브라우저의 방문 URL 목록에 새 항목이 추가됩니다.
이는 바람직한 동작이 아니기 때문에 일부 구글에서 Iframe 개체를 '백리스트'에 추가하지 않고 새 URL을 할당할 수 있다는 것을 알게 되면 다음과 같이 나타납니다.

var frame = $('#myIFrame')[0];  
frame.contentWindow.location.replace(newUrl);

이렇게 하면 내 뒤로 버튼이 정확히 작동한다.

그나저나, 여기서 을 얻었어.

이것이 나에게 그랬던 것처럼 당신에게 도움이 되었기를 바랍니다.

IFrame의 크로스 도메인 URL 을 설정하려고 하면, 허가된 회답은 기능하지 않는 것 같습니다.회피책으로서 IFrame을 DOM에서 분리한 후src(jQuery 사용).

// remove IFrame from DOM before setting source, 
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();

iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);

iframe 내에 하이퍼링크를 만드는 것이 좋습니다.이것을 'Back'이라고 부르고 href를 javascript:history.back(-1)로 하는 것이 최선이라고 생각합니다.

기본적으로 HTML5에 도입된iframe, history.replaceState에 새로운 이력 엔트리가 추가되는 것을 방지해야 합니다.

history.pushState(state, title, url);

부트스트랩모달 내에서 크로스 도메인 iframe을 관리하고 있기 때문에, 나에게 유효한 유일한 솔루션은, 각 iframe 페이지의 선두에 다음의 코드를 넣는 것입니다.

    history.pushState(null, null, location.href);
    window.onpopstate = function () {
      history.go(1);
    };

iframe 콘텐츠를 제어해야 하고 상위 창의 이력 체인을 끊어야 하므로 모든 사용자가 이 방법을 사용할 수 있는 것은 아닙니다.

아니요, 이것은 전적으로 브라우저에 달려 있습니다.

언급URL : https://stackoverflow.com/questions/2245883/browser-back-acts-on-nested-iframe-before-the-page-itself-is-there-a-way-to-av

반응형