IE浏览器中的Google Docs查看器

时间:2010-05-08 02:10:21

标签: internet-explorer pdf iframe google-docs viewer

我搜索了高低的解决方案,但找不到一个。我正在使用Google Docs Viewer来查看PDF文件。这是一个很棒的工具,但我似乎无法在Internet Explorer(7或8)中使用它。我的所有图像都显示为“缺失”图标。如果我在外部查看文件,它似乎加载正常,它将开始工作(我假设因为图像正在缓存)。该文档显示在iframe中,适用于所有其他浏览器。有没有人遇到过让它在IE中运行的解决方案?如果没有,是否有可以显示PPT和PDF文件的替代方案?

3 个答案:

答案 0 :(得分:3)

我遇到同样的问题,但不认为让用户将网址添加到IE中的可信站点是不可接受的。

幸运的是,我遇到了following post

  

如果禁用第三方Cookie,嵌入式版Google文档查看器(gview)将无法正确加载其图像。对于大多数IE用户来说,此问题是一个问题,因为默认情况下它将被禁用。下面我提供一个解决这个问题的工作,至少在谷歌添加p3p之前。有关该问题的原始讨论可以在google docs帮助论坛中找到。

我试过这个,它适用于IE8,IE7和IE6。

答案 1 :(得分:1)

我知道这是一个老问题,但由于问题仍然存在,我在这个问题上偶然发现了一个空白网站的答案,这里是{{3}提到的脚本的实际代码,以防万一其他人需要它。 (可能会发现,这次是@codeinthehole answer

<?php
# This proxy code is a bypass for an existing flaw in Google Docs Viewer that breaks the functionality
# for some IE users. If you do not wish to use this code, select Google Standard Viewer rather than
# Enhanced Viewer in GDE Settings. Note that viewer toolbar customization options depend on this
# proxy workaround remaining enabled.
# 
# The problem this code addresses is discussed at length on Google's Help Forum:
# http://www.google.com/support/forum/p/Google+Docs/thread?tid=22d92671afd5b9b7&hl=en
# 
# This code is based on the work of Peter Chen. For more information, see:
# http://peterchenadded.herobo.com/gview/
#
# Peter's code is modified below to allow for cURL fallback, viewer toolbar customization,
# and to reflect changes in the viewer since the code was first released.
// test for allow_url_fopen in php config; try curl for function if disabled
if (ini_get('allow_url_fopen') !== "1") {
  if (function_exists('curl_version')) {
    $curl = 1;
  } else {
    $err = "This function is not supported on your web server. Please add ";
    $err .= "<code>allow_url_fopen = 1</code> to your php.ini or enable cURL library. ";
    $err .= "If you are unable to do this, please switch to Google Standard ";
    $err .= "Viewer in GDE Options.";
    echo $err;
    exit;
  }
}
if (isset($_GET['embedded'])) { 
  // get the src page, change relative path to absolute
  if (isset($curl)) {
    $code = curl_get_contents("http://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);
  } else {
    $code = file_get_contents("http://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);
  }

  // fix path to images
  $search[] = "/viewer/images";
  $replace[] = "http://docs.google.com/viewer/images";
  $search[] = "/gview/images";
  $replace[] = "http://docs.google.com/viewer/images";

  // proxy the javascript file
  $search[] = "gview/resources_gview/client/js";
  $replace[] = "?jsfile=gview/resources_gview/client/js";
  if (isset($_GET['gdet'])) {
    $gdet = $_GET['gdet'];
    # hide google icon (i)
    /* These are no longer visible by default - not necessary
    if (strstr($gdet, 'i') !== false) { 
        $search[] = ".goog-logo-small {";
        $replace[] = ".goog-logo-small { display: none !important;";
    }
    # hide single/double page view (p)
    if (strstr($gdet, 'p') !== false) { 
        $search[] = ".controlbar-two-up-image {";
        $replace[] = ".controlbar-two-up-image { display: none !important;";
        $search[] = ".controlbar-one-up-image {";
        $replace[] = ".controlbar-one-up-image { display: none !important;";
    }
    */
    # hide zoom in/out (z)
    if (strstr($gdet, 'z') !== false) { 
        $search[] = "#zoomOutToolbarButtonIcon {";
        $replace[] = "#zoomOutToolbarButtonIcon { display: none !important;";
        $search[] = "#zoomInToolbarButtonIcon {";
        $replace[] = "#zoomInToolbarButtonIcon { display: none !important;";
    }
    # hide open in new window (n)
    if (strstr($gdet, 'n') !== false) { 
        $search[] = "#openInViewerButtonIcon {";
        $replace[] = "#openInViewerButtonIcon { display: none !important;";
    }
  }

  $code = str_replace($search, $replace, $code);  

  header('Content-type: text/html');  
  echo $code;  

} else if (isset($_GET['a']) && $_GET['a'] == 'gt') {  
  // get text coordinates file, can not redirect because of same origin policy
  if (isset($curl)) {
    $code = curl_get_contents("http://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);
  } else {
    $code = file_get_contents("http://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);
  }

  header('Content-type: text/xml; charset=UTF-8');  
  echo $code;  

} else if (isset($_GET['a']) && $_GET['a'] == 'bi') {  
  // redirect to images  
  header("Location: http://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);  
  header('Content-type: image/png');  

} else if (isset($_GET['jsfile'])) {  
  // proxy javascript files and replace navigator.cookieEnabled with false
  if (isset($curl)) {
    $code = curl_get_contents("http://docs.google.com/" . $_GET['jsfile']);  
  } else {
    $code = file_get_contents("http://docs.google.com/" . $_GET['jsfile']); 
  }

  $search = array("navigator.cookieEnabled");  
  $replace = array("false");  
  $code = str_replace($search, $replace, $code);  

  header('Content-type: text/javascript');  
  echo $code;  

} else {  
  // everything else, of which there isn't!  
  header("Location: http://docs.google.com/viewer?" . $_SERVER['QUERY_STRING']);  
} 
function curl_get_contents($url) {
  $ch = curl_init();
  $timeout = 5; // set to zero for no timeout
  curl_setopt ($ch, CURLOPT_URL, $url);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $file_contents = curl_exec($ch);
  curl_close($ch); 

  return $file_contents;
}

答案 2 :(得分:0)

我发现此问题的唯一解决方案是将https://docs.google.com添加到您信任的互联网网站。