4

I've searched high and low for a solution, but can't find one. I'm using Google Docs Viewer to view PDF files. It's a great tool, but I can't seem to get it working in Internet Explorer (7 or 8). All my images come up as a 'missing' icon. If I view the file externally, it seems to load fine and it will start working (I'm assuming because the images are being cached). The document is being displayed in an iframe and works in all other browsers. Has anyone come across a solution to get it to work in IE? If not, is there an alternative that can display PPT and PDF files?

Cœur
  • 32,421
  • 21
  • 173
  • 232
Skoder
  • 3,613
  • 10
  • 41
  • 73
  • I guess this question belongs to superuser, not sure. however, that works for me – Matias May 08 '10 at 03:23
  • Hi, I'll move it to superuser if requested. I thought I'd post it here as it's more on the development side. Do you mean that the Docs Viewer works for you in IE, first time (as in, a document you've never opened before)? – Skoder May 08 '10 at 03:25

3 Answers3

3

I have the same problem, but didn't think it was acceptable to have to ask users to add the URL to their trusted sites in IE.

Luckily I came across the following post:

The embedded version of Google Docs Viewer (gview) will not load its images correctly if third party cookies are disabled. This problem is an issue for most IE users as by default it will be disabled. Below I provide a work around to this problem for at least until google adds a p3p. The original discussion of the issue can be found at google docs help forum.

I've tried this out and it works in IE8, IE7 and IE6.

codeinthehole
  • 8,187
  • 3
  • 22
  • 34
  • 3
    codeinthehole or @Skoder: I have the same problem, but the link in the answer doesn't work anymore. Could you provide the solution, please? :) – rassom Aug 05 '15 at 14:52
  • 1
    @rassom I just found the script on github, at https://github.com/cyclops1982/NOMAC/blob/master/wp-content/plugins/google-document-embedder/proxy.php – fboaventura Aug 26 '15 at 13:59
1

I know this is a old question, but since the problem still persists and I've stumbled on this question with a answer pointing to a blank website, here is the actual code of the script mentioned at @codeinthehole answer, just in case someone else needs it. (It may be found, this time, at GitHub)

<?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;
}
fboaventura
  • 162
  • 1
  • 5
0

The only solution I've found to this problem, is to add https://docs.google.com to your trusted internet sites.

Ray
  • 16