문제

현재 웹 사이트에서 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top