문제

Page 레이아웃에 공급자 호스팅 웹 파트가 있습니다.사용자가 어떤 페이지를 방문하면 뒤로 버튼을 사용할 수 없을 때 현재 페이지로 다시 돌아 가기를 시도 할 때

웹 파트는 사용자가 히트를 히는 경우 실제로 사용자가 히트를 히는 것으로 인정받는 사람이 invipeirect.aspx의 SRC가있는 iframe에서 호스팅됩니다.

누구 든지이 주위를 알고 있습니까?우리는 SharePoint 온라인에서 호스팅하고 있으므로 기본 파일을 편집 할 수 없습니다.

도움이 되었습니까?

해결책

공급자 호스팅 된 앱의 첫 번째 페이지에서 JavaScript를로드합니다.

동일한 문서의 두 기록 항목간에 활성 히스토리 항목이 변경 될 때마다 PopState 이벤트가 창에 전달됩니다.

-> 동일한 페이지에 대한 기록 기록 추가 (제공자 호스트 시작 URL)

-> 뒤로 버튼을 누르면 POPSTATE 이벤트가 트리거되고 올바른 내역 페이지가로드됩니다.

PushState를 사용하여 동일한 문서 URL로 페이지를 다시로드하지 않고도 기록 항목을 추가합니다.

물론, 역사 기록은 Firefox & Chrome에서 동일하게 ... IE를 제외하고는 ... 어떤 것들은 내가 이해하지 못하는 어떤 것들을합니까? 그러나 한 번 더 뒤로 되돌아 가면 작동합니다. -> 브라우저 확인을 추가하고 Internet Explorer의 기록에서 한 번 더 페이지를 되돌립니다.

조금 불쾌했지만 그것은 아주 잘 작동합니다. IFrame 내부의 페이지를 탐색 한 다음 뒤로 가면 작동합니다.

iframe에서 몇 가지 링크를 클릭하고 첫 번째 페이지에서 끝나면 이상한 동작을 할 수 있습니다. 해당 상황에서 뒤 / 앞으로 버튼을 누르면 이벤트도 트리거됩니다.

window.onpopstate = function (event) {
    if (navigator.sayswho.indexOf("IE") != -1) {
        history.go(-3);
    }
    else {
        history.go(-2);
    }
};

if (document.referrer.indexOf("_layouts/15/appredirect.aspx?") != -1) {
    // Add history so when you click on the back button, the onpopstate event is 
    // triggered since the previous page is on the same document.
    history.pushState({}, "reload", document.location.href);
}

// Just to test if internet explorer is used, change with your own if you want :-)
navigator.sayswho = (function () {
var ua = navigator.userAgent, tem,
M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
    tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
    return 'IE ' + (tem[1] || '');
}
if (M[1] === 'Chrome') {
    tem = ua.match(/\bOPR\/(\d+)/)
    if (tem != null) return 'Opera ' + tem[1];
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
return M.join(' ');
})();
.

나는 그것을 테스트했고, 그것은 적절하게 작동하는 것으로 보인다.

IE11, Firefox 31.0 & Chrome 36에서 작동합니다.

HTML5 History API가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top