【问题标题】:Catching "Display forbidden by X-Frame-Options” [duplicate]捕捉“X-Frame-Options禁止显示”[重复]
【发布时间】:2023-03-29 12:13:02
【问题描述】:

我明白这个错误是无法克服的。

但我想做的是,当我遇到无法嵌入的页面时,该页面只是作为弹出窗口加载。目前正在发生的事情是我被重定向到该页面。

对于无法嵌入的页面,我在 chrome 中看到以下错误。

 Refused to display 'http://www.nokia.com/us-en/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'

【问题讨论】:

  • 我假设您应该能够检查 XMLHttpRequest 上的响应标头...
  • 我对响应标头了解得不够多,不知道这意味着什么……

标签: javascript html iframe x-frame-options


【解决方案1】:

这是一个类似答案的链接,它提供了一个 PHP 脚本来检查标题: Detect X-Frame-Options

你可以修改它,让它接受一个 GET 变量:

$error=false;
$urlhere=$_GET["url"];
$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));

然后使用ajax请求测试每个url

$.getJSON("/path/to/script.php?url="+url_variable, function (data) {
   if (data.error) { 
      // code to display pop-up
   } else { 
      // code to display iframe
   }
});

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多