我目前正在使用IFrame在网站上对用户生成的内容进行沙盒处理。这消除了我们的主要样式表的任何样式问题。
但是,当用户使用我们的富文本编辑器生成链接时,我们希望链接在父级中打开,而不仅仅是打开IFrame中的链接。我意识到您可以为父级设置目标,但我们无法控制用户以及他们在内容中输入的内容。
有没有办法劫持IFrame中的HREF,所以他们都在没有修改它们的情况下定位父类?或者使用一些可以普遍注入的Javascript,这样我就不需要抓取所有内容并以编程方式替换目标?
理想情况下,一个位置的简单脚本将是最佳解决方案。
思想?
结束解决方案
我使用了我选择的答案的变体......它让我朝着正确的方向前进。
<script>
Event.observe(window, 'load', function() {
$$('a').each(function(e) {
e.writeAttribute('target', '_parent');
});
});
</script>
这是IFrame中的内容。它最终成为该任务最简单的解决方案。
答案 0 :(得分:2)
使用它来创建它,你可以使用$ 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
答案 1 :(得分: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,它们可以防止iframe滥用网站(想象一下银行网站周围的恶意框架,你可以理解为什么)。
答案 2 :(得分:0)
我通过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替换了主体。
答案 3 :(得分:0)
最简单的答案:
<head>
<base target="_blank">
</head>