iframe의 href가 부모를 대상으로 사용하도록 강요
-
22-07-2019 - |
문제
현재 웹 사이트에서 iframe to Sandbox 사용자 생성 컨텐츠를 사용하고 있습니다. 이렇게하면 주요 스타일 시트의 스타일 문제가 제거됩니다.
그러나 사용자가 Rich Text 편집기를 사용하여 링크를 생성 할 때 링크가 부모 내에서 열 수 있고 iframe에서 링크를 열지 않기를 원합니다. 나는 당신이 대상을 부모에게 설정할 수 있다는 것을 알고 있지만, 우리는 사용자를 제어 할 수없고 콘텐츠에 입력 한 내용이 없습니다.
iframe 내부의 Hrefs를 납치 할 수있는 방법이 있습니까? 아니면 보편적으로 주입 할 수있는 약간의 JavaScript를 사용하여 모든 컨텐츠를 긁어 내고 프로그래밍 방식으로 대상을 교체 할 필요가 없습니까?
이상적으로는 한 지점의 간단한 스크립트가 최상의 솔루션입니다.
생각?
최종 솔루션
나는 내가 선택한 대답의 변형을 사용했다. 그것은 나를 올바른 방향으로 만들었다.
<script>
Event.observe(window, 'load', function() {
$$('a').each(function(e) {
e.writeAttribute('target', '_parent');
});
});
</script>
그것은 콘텐츠와 함께 iframe 안에 있습니다. 결국 작업을위한 가장 간단한 솔루션이되었습니다.
해결책
이것을 사용하여 그것을 만들면 $ body 변수가있는 모든 부품에 액세스 할 수 있습니다.
$(function() {
var $frame = $('<iframe style="width:200px; height:100px;">');
$('body').html( $frame );
setTimeout( function() {
var doc = $frame[0].contentWindow.document;
var $body = $('body',doc);
$body.html('<h1>Test</h1>');
}, 1 );
});
그러면 이런 일을 할 수 있습니다
$('a', $body).attr('target', '_parent');
여기에서 찾은 것 : http://groups.google.com/group/jquery-en/browse_thread/thread/fb646741a6192540
다른 팁
Iframe에서 동일한 도메인? 예.
<script type="text/javascript">
function hijacklinks(iframe){
var as = iframe.contentDocument.getElementsByTagName('a');
for(i=0;i<as.length;i++){
as[i].setAttribute('target','_parent');
}
}
</script>
<iframe src="http://example.com/test.html" onload="hijacklinks(this)"></iframe>
Iframe의 다른 도메인? 아니.
<iframe src="http://www.google.com/search?q=google+happy" onload="hijacklinks(this)"></iframe>
"속성 htmldocument.getElementsByTagName을 받기위한 권한 거부"를 수출합니다.
주변에 방법이있을 수 있지만 적어도 간단한 JavaScript에서는 사이트와 함께 iframes에 대한 보호 기능입니다 (은행 웹 사이트 주변의 악의적 인 프레임을 상상하면 그 이유를 이해할 수 있습니다).
Ajax를 통해 크로스 도메인 문제를 해결했습니다 ..
function runAjaxDone(response) {
$('body').html(response);
}
function callAjax(url) {
$.ajax({ url: url + '&r=' + Math.random(), success: runAjaxDone });
return false;
}
<a runat="server" href="#"
onclick='<%# "callAjax(\"http://partners.thevoiceinternet.com/portal/Customer/Report/AgentReport.aspx?AgentID="+Eval("AgentID").ToString()+"&name="+Server.UrlEncode(Eval("SubAgentName").ToString())+"\"); return false;" %>'>
<asp:Label ID="lbl" runat="server" Text='<%# Eval("SubAgentName") %>'></asp:Label></a>
부모 프레임에 접근 할 수 없으므로 Ajax를 통해 몸을 교체했습니다.
가장 간단한 답변 :
<head>
<base target="_blank">
</head>