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?
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
@Nathan können Sie bitte den Fehler angeben, den Sie nach dem Bearbeiten der Hosts-Datei sehen? –
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