【问题标题】:Stop an embedded iframe from redirecting阻止嵌入式 iframe 重定向
【发布时间】:2012-07-09 06:09:55
【问题描述】:

有没有办法阻止嵌入式 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 的用途是什么?
  • 你可以在上面放一个 div 吗?

标签: javascript jquery html iframe


【解决方案1】:

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

破坏默认浏览器行为(例如单击锚标记)通常会使用户感到沮丧并阻止他们返回您的页面。

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

话虽如此,从事件处理程序返回false 将阻止浏览器接收事件:

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

值得一提的是,如果 iframe 与脚本运行所在的域不同,这将不起作用。如果是这种情况,您将需要构建一个透明的覆盖 div 来吞下点击事件并将其绝对定位在 iframe 上。

这是一个演示这两种方法的小提琴:http://jsfiddle.net/qX4fu/1/

【讨论】:

    【解决方案2】:

    由于您的 iframe 显然由另一个域提供服务,因此无法使用标准解决方案。 You can't read or modify the iframe nor its document.

    但是你可以像这样在它上面放置一个不可见的 div:http://jsfiddle.net/dystroy/Afg3K/

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

    但大多数情况下,iframe 包含合同禁止这些事情。在你做之前先看看你的协议。

    【讨论】:

      【解决方案3】:

      如果您使用的是 HTML5,我建议您使用新的“沙盒”属性,但它尚未与所有浏览器兼容。 http://www.w3schools.com/tags/att_iframe_sandbox.asp

      在我的例子中,我只是添加了“allow-forms”和“allow-scripts”作为沙盒属性值,并且嵌入的站点不再重定向并且仍然可以运行 JavaScript

      例如:&lt;iframe sandbox="allow-forms allow-scripts" ... /&gt;&lt;/iframe&gt;

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

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

      【讨论】:

        猜你喜欢
        • 2012-11-22
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 2015-08-21
        相关资源
        最近更新 更多