如何防止iframe显示外部网站?

时间:2015-08-05 10:41:02

标签: javascript html iframe

假设我在iframe.domain.com上显示iFrame。我希望此iframe能够显示iframe.domain.com或sub.domain.com中的内容。但这些网站包含指向外部网站的链接,例如google.com。如果用户点击将其重定向到google.com的链接,我希望将iFrame重定向到sub.domain.com

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以使用e.preventDefault()来实现此目的 实现这个目标

现在要在框架中的链接上设置onclick处理程序,您可以使用此功能

function onLoadIF(frame)
{
    var elements = frame.getElementsByTagName('a'),
        len = elements.length;

    while( len-- ) {
        $(elements[len]).on('click', function(e){
          e.preventDefault();
        }
    }
}

答案 1 :(得分:0)

我想扩展Arno_Geismar所说的内容。

您还有其他选择:

1)HTML5!

<iframe sandbox="value">

沙盒属性将:

沙箱属性为iframe中的内容启用了一组额外的限制。

当沙箱属性存在时,它将:

  • 将内容视为来自独特的来源
  • 阻止表单提交
  • 阻止脚本执行
  • 禁用API
  • 阻止链接定位到其他浏览上下文
  • 阻止内容使用插件(通过,,或其他)
  • 阻止内容导航其顶级浏览上下文
  • 阻止自动触发的功能(例如自动播放视频或自动聚焦表单控件)

沙箱属性的值可以是沙箱(然后应用所有限制),也可以是以空格分隔的预定义值列表,这些值将删除特定限制。

more info here

2)Javascript:如果你正在使用jquery,你可以简单地把这个

$(document).ready(function(){       
    $('a').click(function(event) {
        event.preventDefault();
    });
});

这基本上(几乎)与Arno_Geismar给你的解决方案相同。这里的不同之处在于我并不需要遍历所有&#34; a&#34;元素,从而提高一点性能

答案 2 :(得分:0)

我遇到了这个问题,我确定的解决方案是:

  1. 在您的 meta 部分放置一个 Content-Security-Police <header> 标签:

    <meta http-equiv="Content-Security-Policy" content="frame-src https://desired_domain.com/">
    
  2. 如果您想阻止链接打开新标签页,请在您的 sandbox 中使用 <iframe> 属性:

    <iframe src="https://desired_url.com" sandbox="allow-same-origin allow-scripts"></iframe>