Javascript 强制IFrame中的任何HREF使用其父对象作为目标

Javascript 强制IFrame中的任何HREF使用其父对象作为目标,javascript,jquery,iframe,href,target,Javascript,Jquery,Iframe,Href,Target,我目前正在使用IFrame对网站上用户生成的内容进行沙箱处理。这消除了主样式表的任何样式问题 但是,当用户使用富文本编辑器生成链接时,我们希望该链接在父级中打开,而不仅仅是在IFrame中打开该链接。我知道你可以为家长设定一个目标,但我们无法控制用户以及他们在内容中输入的内容 有没有办法劫持IFrame中的HREF,使它们都以父级为目标,而不进行修改?或者使用一点可以普遍注入的Javascript,这样我就不需要浏览所有内容并通过编程替换目标 理想情况下,一个简单的脚本在一个地点将是最好的解决方

我目前正在使用IFrame对网站上用户生成的内容进行沙箱处理。这消除了主样式表的任何样式问题

但是,当用户使用富文本编辑器生成链接时,我们希望该链接在父级中打开,而不仅仅是在IFrame中打开该链接。我知道你可以为家长设定一个目标,但我们无法控制用户以及他们在内容中输入的内容

有没有办法劫持IFrame中的HREF,使它们都以父级为目标,而不进行修改?或者使用一点可以普遍注入的Javascript,这样我就不需要浏览所有内容并通过编程替换目标

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

想法

最终解决方案

我使用了我选择的答案的变体。。。这让我找到了正确的方向

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

事件。观察(窗口“加载”,函数(){
$$('a')。每个(函数(e){
e、 writeAttribute('target','u parent');
});
});

这在包含内容的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 ); 
    }); 

在此处找到:

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){
var as=iframe.contentDocument.getElementsByTagName('a');

对于(i=0;i我通过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>
函数runAjaxDone(响应){
$('body').html(响应);
}
函数callAjax(url){
$.ajax({url:url+'&r='+Math.random(),success:runAjaxDone});
返回false;
}
由于无法访问父帧,我通过ajax替换了主体。

最简单的答案:

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


请原谅我的无知和缺乏Javascript fu,但是考虑到这段代码,它似乎正在构建一个IFrame和其中的内容,对吗?在HREF上强制执行目标是从哪里开始的。编辑之前你的回答对我来说更有意义。啊,好吧,我跟不上你的编辑:)我会尝试一下…谢谢!我倾向于编辑…很多。主要是因为论坛的节奏很快
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>
<head>
    <base target="_blank">
</head>