【问题标题】:How to detect X-Frame-Options in an iframe and open link in new tab?如何在 iframe 中检测 X-Frame-Options 并在新选项卡中打开链接?
【发布时间】:2015-10-13 20:21:31
【问题描述】:

我知道这是一个热门问题,但提供的答案似乎都不是直截了当的。

在 Pseudocode/Jquery 中是这样的:

if (X-Frame-Options detected) { 
$('a[target="iframe"]').click(function()) {
$('a[target="_blank"]').show();
})
}

任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 我想提一下链接来自另一个域,因此错误是拒绝在框架中显示“链接”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。目的是为用户提供一个“在新标签中打开”按钮。

标签: javascript php jquery iframe


【解决方案1】:

经过进一步研究,我在 stackoverflow 上找到了答案:Detect X-Frame-OptionsCatching "Display forbidden by X-Frame-Options”

PHP 脚本:

$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 请求:

$('a').click(function () {
    $.getJSON("source/script.php?url="+this, function (data) {
     if (data.error) { 
      $('iframe').hide();
      $(".iframe-error").show();
    } else { 
      $(".iframe-error").hide();
      $('iframe]').show();
    }
  });
  });

显示 iframe 的代码和指向新标签的链接仍需进一步开发。

【讨论】:

  • 我经历过标题有时不同(拒绝 vs 拒绝 vs 拒绝)等的情况。为了解决这个问题,我用快速 strtolower() 包围了 substr 并修改以下条件为西装
猜你喜欢
  • 2012-04-25
  • 1970-01-01
  • 2017-04-08
  • 2013-06-12
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
相关资源
最近更新 更多