Определение параметров X-Frame - программирование
Подтвердить что ты не робот

Определение параметров X-Frame

Есть ли способ определить, может ли страница загружаться в iframe?

Если URL-адрес не может загружаться в iframe, я хотел бы сообщить пользователю, что URL-адрес, который они отправляют, не будет работать на нашем сайте.

Я попытался получить содержимое, но это не работает:

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

Я не уверен, куда идти отсюда.

Отказано в отображении 'https://www.facebook.com/' в фрейме, потому что он установил "X-Frame-Options" в "DENY".

Есть ли способ обнаружить X-Frame-Options?

4b9b3361

Ответ 1

Так как ваш script и целевой URL находятся в разных доменах, перекрестная политика JavaScript не позволит вам получить доступ к заголовкам. Я столкнулся с той же проблемой несколько месяцев назад и в итоге использовал JavaScript для отправки запроса AJAX в файл PHP, который затем мог анализировать заголовки.

Это то, что я имел в файле 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));

Я знаю, что это не идеальный ответ, но все, что я мог бы получить, чтобы работать с моим проектом.


Изменить: Как Bill ниже, если вы измените strpos() до stripos(), вы можете получить лучшие результаты, поскольку вместо этого он запускает нечувствительный к регистру поиск.