Ловля «Отображение запрещено X-Frame-Options»

Я так понимаю, что эту ошибку не побороть.

Но что я хотел бы сделать, так это то, что когда я сталкиваюсь со страницей, которую нельзя встроить, вместо этого страница просто загружается как всплывающее окно. В настоящее время происходит то, что меня перенаправляют на страницу.

Я вижу следующую ошибку в Chrome для страниц, которые невозможно встроить.

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

person Dan Ciborowski - MSFT    schedule 01.05.2013    source источник
comment
Я предполагаю, что вы должны иметь возможность проверять заголовки ответа на XMLHttpRequest...   -  person rene    schedule 01.05.2013
comment
Я недостаточно знаю о заголовках ответов, чтобы понять, что это значит...   -  person Dan Ciborowski - MSFT    schedule 05.05.2013


Ответы (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
   }
});
person Jonathon Klem    schedule 27.02.2014