停止重定向嵌入的iframe

Stop an embedded iframe from redirecting

本文关键字:iframe 重定向      更新时间:2023-09-26

有没有办法阻止嵌入的iframe可点击,或者让整个iframe都可点击?我希望iframe能够提取数据,但我不希望访问者能够点击iframe并从iframe上的一个位置重定向。

这可能吗?下面是iframe的一个例子:

<iframe src="http://www.indiegogo.com/project/157203/widget?escape=false" width="224px" height="429px" frameborder="0" scrolling="no"></iframe>

http://jsfiddle.net/qX4fu/

由于您的iframe显然由另一个域提供服务,因此不能使用标准解决方案。您无法读取或修改iframe及其文档。

但是您可以在上面放置一个不可见的div,如下所示:http://jsfiddle.net/dystroy/Afg3K/

<div id=a></div>
#a{
    position:fixed;
    top:0;
    left:0;
    width:224px;
    height:429px;
}​

但大多数时候,iframe包含合同都禁止这些事情。在执行之前先查看您的协议。

这是可能的,尽管我不建议这样做。

与默认浏览器行为(如锚标记点击)相冲突通常会让用户感到沮丧,并阻止他们返回到您的页面。

此外,正如dystroy在回答中所说,在你的页面上删除iframe所附带的法律条件通常明确禁止这种行为。

也就是说,从事件处理程序返回false将阻止浏览器接收事件:

document.getElementById('yourFrame').contentWindow.document.body.onclick = function () { 
    return false; 
};

值得一提的是,如果iframe所在的域与脚本运行的域不同,那么这将不起作用。如果是这样的话,您将需要构建一个透明的覆盖div,该div可以吞下点击事件,并将其绝对放置在iframe上。

这是一把小提琴,展示了这两种方法:http://jsfiddle.net/qX4fu/1/

如果你正在使用HTML5,我建议你使用新的"沙盒"属性,但它还不能与所有浏览器兼容。http://www.w3schools.com/tags/att_iframe_sandbox.asp

在我的案例中,我只是添加了"允许表单"answers"允许脚本"作为沙箱属性值,嵌入的网站不再重定向,仍然可以运行JavaScript

例如:<iframe sandbox="allow-forms allow-scripts" ... /></iframe>

如果有人知道使用这种方法的任何缺点,我很想知道。

其他有相同答案的人:https://stackoverflow.com/a/9880360/1404129(我后来遇到了这个答案)