2

某些网站不允许通过 iframe 嵌入。他们产生以下错误:

Refused to display 'https://news.ycombinator.com/news' in a frame because it 
set 'X-Frame-Options' to 'DENY'. 

我们的应用程序允许用户提交 URL。我们想在服务器端检查网站是否可以嵌入 iframe 并添加相应的标志。在客户端上,我们检查标志,然后嵌入 iframe 或仅提供指向网页的直接链接。

如何检查网站是否支持 iframe?

4

3 回答 3

4

试试这个代码:

$url = "http://www.google.com/";
$url_headers = get_headers($url);
foreach ($url_headers as $key => $value)
{
    $x_frame_options_deny = strpos(strtolower($url_headers[$key]), strtolower('X-Frame-Options: DENY'));
    $x_frame_options_sameorigin = strpos(strtolower($url_headers[$key]), strtolower('X-Frame-Options: SAMEORIGIN'));
    $x_frame_options_allow_from = strpos(strtolower($url_headers[$key]), strtolower('X-Frame-Options: ALLOW-FROM'));
    if ($x_frame_options_deny !== false || $x_frame_options_sameorigin !== false || $x_frame_options_allow_from !== false)
    {
        echo 'url prevent iframe!';
    }
}
于 2015-06-05T21:11:42.337 回答
3

X-Frame-Options是服务器发送的响应标头,因此让您的服务器对您要测试的 URL 执行 HTTP GET,查看X-Frame-Options标头是否存在,以及是否存在......根据规范判断,您不太可能被允许嵌入它。

于 2013-09-09T16:45:58.827 回答
1

我写了这个函数:

function allowEmbed($url) {
    $header = @get_headers($url, 1);

    // URL okay?
    if (!$header || stripos($header[0], '200 ok') === false) return false;

    // Check X-Frame-Option
    elseif (isset($header['X-Frame-Options']) && (stripos($header['X-Frame-Options'], 'SAMEORIGIN') !== false || stripos($header['X-Frame-Options'], 'deny') !== false)) {
        return false;
    }

    // Everything passed? Return true!
    return true;
}
于 2015-07-28T10:06:59.197 回答