强迫任何HREF的iframe中使用其母公司为目标(Force any HREF in an IFr

2019-06-27 18:13发布

我目前使用的iframe沙盒用户生成的网站上的内容。 这消除了我们的主要样式表的任何样式问题。

但是,当用户生成使用我们的富文本编辑器的链接,我们想链接父打开并不仅仅是打开在iframe的链接。 我知道你可以将目标设定为母公司,但我们没有用户的控制和他们在内容输入的内容。

有什么办法劫持的IFrame,使他们所有的目标父里面的HREFs不修改呢? 或者使用一些JavaScript可能会被注入普遍,所以我并不需要通过所有内容的刮和编程替换目标?

理想的情况是在一个地方一个简单的脚本将是最好的解决方案。

思考?

端到端的解决方案

我以前的答案的变化,我选择......这让我在正确的方向。

<script>
  Event.observe(window, 'load', function() {
    $$('a').each(function(e) {
      e.writeAttribute('target', '_parent');
    });
  });
</script>

这是与内容的iframe内。 它结束了任务的最简单的解决方案。

Answer 1:

使用此创建它,你将有机会获得与$体变量的任何部分:

$(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



Answer 2:

在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他们反对的I帧与网站摆弄一些保护(想象一下周围的银行网站,恶意的框架,你可以理解为什么)。



Answer 3:

我通过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取代体。



Answer 4:

最简单的答案:

<head>
    <base target="_blank">
</head>


文章来源: Force any HREF in an IFrame to use its parent as the target