检测 X-Frame-Options

IT技术 javascript iframe
2021-03-16 03:58:45

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

如果无法在 iframe 中加载 URL,我想让用户知道他们提交的 URL 在我们的网站上不起作用。

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

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

我真的不确定从这里去哪里。

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

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

1个回答

由于您的脚本和目标 URL 位于不同的域中,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));

我知道这不是一个理想的回应,但这就是我可以处理我的项目的全部内容。


编辑:正如比尔在下面所述,如果您更改strpos()为,stripos()您可能会获得更好的结果,因为它会运行不区分大小写的搜索。

只有一个字太棒了:)
2021-04-24 03:58:45
好的。我将 strpos 更改为 stripos 以获得更好的结果
2021-04-28 03:58:45
好主意,我想明天我会把它添加到我自己的代码中!
2021-05-09 03:58:45
这是一个不错的解决方案。JavaScript 可能无法读取标头,但 PHP 肯定可以:-)
2021-05-11 03:58:45
谢谢你!我还将它用于框架断路器,例如if(self!=top)....
2021-05-13 03:58:45