문제

나는 iframe을 바꾸고 있습니다 src 다시로드하기 위해 잘 작동하고 발사합니다. onload HTML이로드 될 때 이벤트.

그러나 그것은 내가 원하지 않는 역사에 항목을 추가합니다. iframe을 다시로드하고 역사에 영향을 미치지 않는 방법이 있습니까?

도움이 되었습니까?

해결책

JavaScript를 사용할 수 있습니다 location.replace:

window.location.replace('...html');

현재 문서를 제공된 URL의 문서로 바꾸십시오. 할인 () 메소드와의 차이점은 대체 ()를 사용한 후 현재 페이지가 세션 기록에 저장되지 않으므로 사용자가 뒤로 버튼을 사용하여 탐색 할 수 없다는 것입니다.

다른 팁

대체 ()를 사용하는 것은 자신의 도메인 iframes의 옵션 일뿐입니다. 원격 사이트 (예 : 트위터 버튼)에서 작동하지 않으며 하위 창에 안정적으로 액세스하려면 브라우저 특정 지식이 필요합니다.

대신, iframe 요소를 제거하고 같은 지점에 새 요소를 구성하십시오. 역사 항목은 수정할 때만 만들어집니다 src DOM에 속한 속성이므로 부속하기 전에 설정하십시오.

편집 : JDANDCHIPS는 DOM, Modifiy 및 Repend에서 제거 할 수 있다고 올바르게 언급합니다. 신선한 건축은 필요하지 않습니다.

위에서 언급 한 Greg와 마찬가지로 .replace () 함수는이 작업을 수행하는 방법입니다. 나는 그의 대답에 답장하는 방법을 알 수 없지만, 그 요령은 iframes contentwindow 속성을 참조하는 것입니다.

var ifr = document.getElementById("iframeId");
ifr.contentWindow.location.replace("newLocation.html"); 

*방금 답변에 대해 언급하기 위해 더 많은 평판이 필요하다는 것을 알게되었습니다.

iframe을 재현하는 대안적인 방법은 DOM에서 iframe을 제거하고 SRC를 변경 한 다음 다시 추가하는 것입니다.

여러면에서 이것은와 유사합니다 replace() 제안이지만 History.js 및 관리 상태를 수동으로 시도한 접근 방식을 시도했을 때 몇 가지 문제가있었습니다.

var container = iframe.parent();

iframe.remove();
iframe.attr('src', 'about:blank');

container.append(iframe);

한 가지 해결책은 object 태그가 아닌 태그 iframe 꼬리표.

이것을 대체 :

<iframe src="http://yourpage"/>

이로 인해:

<object type="text/html" data="http://yourpage"/>

당신이 그것을 업데이트 할 수 있습니다 data 역사에 영향을 미치지 않고 속성. 이것은 다음과 같은 선언적 프레임 워크를 사용하는 경우 유용합니다. React.js DOM을 업데이트하기 위해 명령 명령을하지 않아야하는 곳.

차이점에 대한 자세한 내용 iframe 그리고 object: iframe 또는 객체 태그를 사용하여 웹 페이지를 다른 사람에 포함시킵니다.

이 기능을 사용하여 Old Iframe을 Old One에서 복사 한 New Iframe으로 바꾸십시오.

function setIFrameSrc(idFrame, url) {
    var originalFrame = document.getElementById(idFrame);
    var newFrame = document.createElement("iframe");
    newFrame.id = originalFrame.getAttribute("id");
    newFrame.width = originalFrame.getAttribute("width");
    newFrame.height = originalFrame.getAttribute("height");
    newFrame.src = url;    
    var parent = originalFrame.parentNode;
    parent.replaceChild(newFrame, originalFrame);
}

다음과 같이 사용하십시오.

setIFrameSrc("idframe", "test.html");

이 방법은 브라우저 기록에 iframe의 URL을 추가하지 않습니다.

사용 replace Iframe의 URL을 히스토리에 추가하는 방법 :

HTML :

<iframe id="myIframe" width="100%" height="400" src="#"></iframe>

자바 스크립트 :

var ifr = document.getElementById('mIframe')
if (ifr) {
  ifr.contentWindow.location.replace('http://www.blabla.com')
}

가장 간단하고 빠른 로딩 솔루션
사용 window.location.replace 페이지 나 프레임을로드 할 때 기록을 업데이트하지 않으려면

링크의 경우 다음과 같이 보입니다.

<a href="#" onclick="YourTarget.location.replace ('http://www.YourPage.com');">
The targeted Link</a>

또는

<a href="javascript:YourTarget.location.replace ('http://www.YourPage.com');">
The targeted Link</a>



하지만 링크에서 행동하지 않고 프레임을로드 할 때 자동으로 행동하기를 원한다면 iframe에서이를 iframe 파일 본문 섹션에 넣어야합니다.

onload="window.location.replace ('http://www.YourPage.com');"


어떤 이유로 든 onload가 iframe에로드되지 않으면 다음과 같은 구문에 창 대신 대상 프레임 이름을 넣습니다.

onload="YourTarget.location.replace ('http://www.YourPage.com');"



노트: 이 스크립트 모두 onclick, onmouseover, onmouseout , onload 그리고 href="javascript:" 작동합니다.

JDANDCHIPS 답변은 크로스 오리지널 iframe (YouTube)에서 저를 위해 일했습니다.

const container = iframe.parentElement;

container.removeChild(iframe);

iframe.setAttribute('src', 'about:blank');

container.appendChild(iframe);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top