2016-11-14 6 views
2

Unter this page finden Sie ein Beispiel für die Einbindung des Google Drive Picker in eine einfache JavaScript-Webseite. Ich habe den Beispielcode in eine Datei auf meinem Computer kopiert und eingefügt und die Anweisungen zum Ersetzen der Beispielzeichenfolgen durch meinen eigenen API-Schlüssel, die Client-ID und die Anwendungs-ID befolgt.Was mache ich falsch mit dem Google Drive Picker-Beispielcode?

Wenn ich die Seite von localhost unter Verwendung python -m SimpleHTTPServer 8000 herstelle und die Seite besuche, schlägt sie auf zwei Arten fehl. Zuerst wird im Dialogfeld "Drive" angezeigt, dass ein Fehler aufgetreten ist. Der API-Entwicklerschlüssel ist ungültig. Zweitens, auf der Konsole sehe ich die Fehler unten. Das Durchsuchen des Webs zeigt mir an, dass dies wahrscheinlich darauf zurückzuführen ist, dass ich eine Nicht-HTTPS-Verbindung verwende, von der die Google API versucht, eine HTTPS-Verbindung zu Google Drive herzustellen. (Im Gegensatz zu dem, was sie scheinen Fehler zu sagen.)

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://docs.google.com') does not match the recipient window's origin ('http://localhost:8000'). 
(anonymous) @ cb=gapi.loaded_0:46 

Uncaught ReferenceError: init is not defined 
    at onload (https://docs.google.com/picker?protocol=gadgets&origin=http%3A%2F%2Flocalho…22%7D))&rpctoken=6pstmf1ss7m2&rpcService=v8gvn97850jj&thirdParty=true:3:54) 

Wenn ich die Seite von localhost mit this handy python script for an SSL web server dienen, und besuchen Sie die Seite, es nicht auf eine andere Weise. Das Dialogfeld "Laufwerk", das angezeigt wird, sagt folgendes.

400. That’s an error. 

Error: origin_mismatch 
Request Details 
     proxy=oauth2relay379676703 
     immediate=false 
     scope=https://www.googleapis.com/auth/drive 
     origin=https://localhost:8000 
     response_type=token 
     redirect_uri=postmessage 
     state=912029351|0.3907265328 
     client_id=[REDACTED] 
     include_granted_scopes=true 
     jsh=m;/_/scs/apps-static/_/js/k=oz.gapi.en.eBn7I_cE2GI.O/m=__features__/am=AQ/rt=j/d=1/rs=AGLTcCNXKKlDNVVUdz0bvaxNh7fYe-hpSQ 
     gsiwebsdk=1 
That’s all we know. 

Obwohl dies scheint darauf hinzudeuten, dass der Drive API nicht von localhost hören will, habe ich die Anmeldeinformationen für den App (in meiner Google-Entwickler-Dashboard) gesetzt Anfragen von https://localhost:8000/* und http://localhost:8000/* zu akzeptieren.

Was mache ich falsch?

Antwort

1

Sie können localhost nicht als Herkunftsadresse verwenden - das ist eine Einschränkung der Google APIs. Um dieses Problem zu beheben, können Sie sich für eine der in der Frage this vorgeschlagenen Optionen entscheiden - verwenden Sie entweder einen URL-Shortener oder konfigurieren Sie Ihre hosts-Datei so, dass eine benutzerdefinierte URL in 127.0.0.1 aufgelöst wird.

+0

Ich kann nicht die Methode URL shortener verwenden, da meine URL einen Port enthält, den goo.gl nicht unterstützt. Ich habe meine/etc/hosts-Datei bearbeitet, wie in der Frage vorgeschlagen, mit der du verlinkt hast, und diese gefälschte URL wird jetzt von localhost geladen, wie es sollte, aber das Verhalten ist identisch mit dem, was passiert, wenn ich stattdessen localhost benutze. Mit anderen Worten, alle Fehler in meiner ursprünglichen Frage bleiben bestehen; Ich habe keine Verbesserung erfahren, indem ich "localhost" von der URL entfernt habe. – Nathan

+0

@Nathan können Sie bitte den Fehler angeben, den Sie nach dem Bearbeiten der Hosts-Datei sehen? –

+0

Der zweite der beiden Fehler in meinem ursprünglichen Beitrag passiert, wenn ich versuche, über die URL mydevserver.example.com auf localhost zuzugreifen, die/etc/hosts auf localhost umleitet. Ich habe versucht, mit http und https, mydevserver.example.com zu meinen Google API-Anmeldeinformationen kurz nach Ihrem letzten Kommentar hinzugefügt, dann 30 Minuten warten, um sicherzustellen, dass es wirksam war. – Nathan