检查网站是否允许iframe嵌入

时间:2011-09-14 20:02:57

标签: javascript jquery iframe google-chrome-extension embed

我正在为我的应用编写一个简单的类似灯箱的插件,我需要嵌入一个链接到任意页面的iframe。问题是,许多网站(例如,facebook,nytimes,甚至stackoverflow)将检查是否嵌入框架中,如果是,将刷新页面,将其自身作为父页面。这是一个众所周知的问题,我认为没有什么可以做的。但是,如果网站支持嵌入或不支持,我希望能够事先知道。如果没有,我想在新的标签/窗口中打开页面,而不是使用iframe。

是否有一个技巧可以让我在javascript中检查这个?

也许有一个服务器端脚本可以检查链接以查看它们是否允许iframe嵌入?

我正在开发一个浏览器扩展程序,因此有机会做一些非常有创意的事情。我的扩展程序已加载到每个页面上,所以我认为有一种方法可以在iframe网址中传递一个参数,如果它破坏了iframe,则可以通过扩展程序获取该参数。然后,我可以将域添加到不支持iframe嵌入的网站列表中。这可能有效,因为扩展未在iframe中加载。我将继续努力,但与此同时......

澄清:

我愿意接受没有办法“破坏”“框架破坏者”,即我知道我无法在iframe中显示不想合并的页面。但我希望我的应用程序优雅地失败,这意味着如果不支持iframe嵌入,则在新窗口中打开链接。理想情况下,我想检查iframe在运行时嵌入支持(javascript),但我可以看到使用代理的潜在服务器端解决方案,如上面的评论中所建议的那样。希望我能建立一个不允许嵌入iframe的网站数据库。

3 个答案:

答案 0 :(得分:8)

使用以下代码检查x-frame-options标头

$url = "http://stackoverflow.com";
$header = get_headers($url, 1);
echo $header["X-Frame-Options"];

如果返回值为DENY,SAMEORIGIN或ALLOW-FROM,则您无法将iframe与该网址一起使用。

答案 1 :(得分:2)

可能很晚,但您需要做的是提出请求,可能来自您的服务器并查找x-frame-options标头。如果它在那里你可以只打开一个新选项卡,因为如果它存在以下之一:DENY,SAMEORIGIN,ALLOW-FROM。在任何这些情况下,您可能无权在iframe中打开它。

答案 2 :(得分:1)

此主题已在网上永远讨论过,其中有一个特别有趣(失败)的尝试:

Frame Buster Buster ... buster code needed

最重要的是,即使您能够构建一个代理,用于解析您在iframe中所需的网页内容,并在将其提供给iframe之前删除有问题的代码,您仍可以“停止”如果他们听说你这样做,就“停止”。

如果您不希望广泛使用您的开发,您可能会侥幸逃脱。如果你希望你的开发变得流行,那就忘了它,并建立一种较少的处理方式。

或仅为移动设备开发......;)

更新:好的,继续发表您的评论,这里有点品尝:

在javascript中捕获链接上的点击

$("a").click(function(e){

    preventDefault(e); // make sure the click doesn't happen

    // call a server side script using ajax and pass the URL this.href
    // return either a true or false; true = iframe breakout
    // set the target attribute of the link to "_blank" for new window (if true)
    // set the target attribute of the link to "yourframename" for iframe (if false)
    // only now load the page in the new window or iframe
});
PHP中的

服务器端

$d = file_get_contents($url); // $url is the url your sent from the browser
// now parse $d to find .top .parent etc... in the <head></head> block
// return true or false