Как настроить CSS в представлении google docs iframe?
Я понимаю, что iframe получает контент из источника кросс-домена, который я не контролирую, мне просто интересно, есть ли у кого-нибудь хак вокруг этого?
Как настроить CSS в представлении google docs iframe?
Я понимаю, что iframe получает контент из источника кросс-домена, который я не контролирую, мне просто интересно, есть ли у кого-нибудь хак вокруг этого?
Я спросил об этом, чтобы опубликовать решение. Его полностью взломанный и основан на ответе из другого потока на 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);
Ссылка на таблицу стилей.
В дополнение к вашему ответу, есть что-то еще, чтобы рассмотреть. Чтобы уловить относительные ссылки на пути, вы можете ввести следующее в <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);