Настроить CSS Google Docs Viewer

Как настроить CSS в представлении google docs iframe?

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

Ответы

Ответ 1

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

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

В основном вы проксируете серверы запросов, модифицируете html, а затем ретранслируете содержимое iframe.

<?php
if ( isset( $_GET['a'] ) && $_GET['a'] == 'gt') {
    // proxy xml content - must be done to avoid XSS failures (contains embedded link data and enables text selection)
    $code = gde_get_contents("https://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);
    header('Content-type: application/xml');
    echo $code;
} elseif ( isset( $_GET['a'] ) && $_GET['a'] == 'bi' ) {
    // proxy image content - prevents "too many redirects" on many-paged docs
    header( "Location: https://docs.google.com/viewer?" . $_SERVER['QUERY_STRING'] );
} elseif ( isset( $_GET['jsfile'] ) ) {
    // proxy javascript content - not doing anything here but Google changes return 404 if not proxied (??)
    $code = file_get_contents("https://docs.google.com/" . $_GET['jsfile']);  
    header('Content-type: text/javascript');  
    echo $code; 
} else {
  $content = file_get_contents('http://docs.google.com/viewer?url=http%3A%2F%2Fwww.someurlhere.com%2Fgoogledocs%2Ftest.docx&embedded=true');
  $content = str_replace('gview/resources_gview/client/js','/googledocs/index.php?jsfile=gview/resources_gview/client/js', $content);
  $content = str_replace('</head>','<link rel="stylesheet" href="http://www.example.com/google.css" /></head>', $content);
  header('Content-type: text/html; charset=utf-8');
  echo $content;  
}
?>

Обязательно измените строку:

file_get_contents('http://docs.google.com/viewer?url=http%3A%2F%2Fwww.someurlhere.com%2Fgoogledocs%2Ftest.docx&embedded=true');

к соответствующему URL-адресу для iframe, который вы пытаетесь разместить.

Также измените строку:

  $content = str_replace('</head>','<link rel="stylesheet" href="http://www.example.com/google.css" /></head>', $content);

Ссылка на таблицу стилей.

Ответ 2

В дополнение к вашему ответу, есть что-то еще, чтобы рассмотреть. Чтобы уловить относительные ссылки на пути, вы можете ввести следующее в <head>:

<base href="#" onclick="location.href='http://docs.google.com/'; return false;" target="_blank">

Таким образом, все их скрипты будут загружены правильно, если вам не понадобится регулярное выражение, чтобы заменить "/или что-то еще неравномерное. В вашем примере PHP:

$content = str_replace('<head>','<head><base href="#" onclick="location.href='http://docs.google.com/'; return false;" target="_blank">', $content);