检测X帧选项

Get*_*awn 10 javascript iframe

有没有办法检测是否允许在iframe中加载页面?

如果无法在iframe中加载网址,我想让用户知道他们提交的网址在我们的网站上无效.

我试图获取内容,但这不起作用:

$("iframe#data-url").on("load", function() {
    alert($(this).contents())
});
Run Code Online (Sandbox Code Playgroud)

我不确定从哪里开始.

拒绝在一个框架中显示" https://www.facebook.com/ ",因为它将"X-Frame-Options"设置为"DENY".

有没有办法检测X-Frame-Options

Jam*_*lor 13

由于您的脚本和目标网址位于不同的域中,因此JavaScript的跨域策略不允许您访问标头.几个月前我遇到了同样的问题,最后使用JavaScript向一个PHP文件发送一个AJAX请求,然后解析头文件.

这就是我在PHP文件中所拥有的.然后,这将返回JSON数组中的结果.如果有帮助,请告诉我!

$error=false;
$urlhere='http://facebook.com';
$ch = curl_init();

$options = array(
        CURLOPT_URL            => $urlhere,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER         => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING       => "",
        CURLOPT_AUTOREFERER    => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT        => 120,
        CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch);
$headers=substr($response, 0, $httpCode['header_size']);
if(strpos($headers, 'X-Frame-Options: deny')>-1||strpos($headers, 'X-Frame-Options: SAMEORIGIN')>-1) {
        $error=true;
}
$httpcode= curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo json_encode(array('httpcode'=>$httpcode, 'error'=>$error));
Run Code Online (Sandbox Code Playgroud)

我知道这不是一个理想的反应,但我可以完成我的项目.


编辑:正如Bill所述,如果你改变strpos(),stripos()你可能会得到更好的结果,因为它运行不区分大小写的搜索.

  • 这是一个不错的解决方案.JavaScript可能无法读取标题,但PHP确定可以:-) (2认同)