Ich habe eine HTML5-Anwendung, die die google javascript API verwendet. Ich habe kürzlich festgestellt, dass diese App in einer iframe-Sandbox-Umgebung ausgeführt werden muss. Ich weiß, dass es aussieht, als würde man versuchen, das eigentliche Ziel der Sandbox-Umgebungen zu umgehen. Allerdings sind einige Funktionen für den iframe weiterhin erlaubt (siehe Beschränkungen unten), was mich glauben lässt, dass es etwas Hoffnung gibt.Verwenden Sie die Google-JavaScript-API in einer Sandbox-Iframe-Umgebung
Ich habe Probleme während des Authentifizierungsvorgangs: Wenn geladen, hängt die JavaScript-API von Google einen iFrame auf der ursprünglichen Seite an (was in meinem Fall bereits ein iframe ist) und verwendet einen postMessage-Mechanismus zur Kommunikation zwischen Fenstern. Ich möchte die Google API für den OAuth2.0-Authentifizierungsprozess sowie für die Abfrage der API verwenden.
Hier ist ein Reproduktionsfall; Ich verwende eine vereinfachte Version der authSample.html Seite von Google bereitgestellt.
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>original auth page</title>
</head>
<body>
<button id="authorize-button">Authorize</button>
<div id="content">Not authentified</div>
<script type="text/javascript">
var clientId = '<use yours>';
var apiKey = '<use yours>';
var scopes = 'https://www.googleapis.com/auth/analytics.readonly';
var authorizeButton = document.getElementById('authorize-button');
var resultDiv = document.getElementById('content');
function handleClientLoad() {
gapi.client.setApiKey(apiKey);
authorizeButton.onclick = handleAuthClick;
}
function handleAuthResult(authResult) {
if (authResult && !authResult.error) {
makeApiCall();
} else {
resultDiv.innerHTML = "handleAuthResult Failed";
}
}
function handleAuthClick(event) {
gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false }, handleAuthResult);
return false;
}
function makeApiCall() {
gapi.client.load('analytics', 'v3', function() {
resultDiv.innerHTML = "api call successful";
});
}
</script>
<script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>
</body>
</html>
Die beinhaltende Seite, die von den Endnutzern verwendet wird, wie folgt aussieht:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>iframed page</title>
</head>
<body>
<iframe id="8D681BA3DED5" width="400px" height="400px"
frameborder="0" sandbox="allow-scripts allow-forms allow-same-origin ms-allow-popups allow-popups" marginheight="0" marginwidth="0"
name="MyTest" src="https://localhost:4000/AuthSample.html"></iframe>
</body>
</html>
Natürlich werden Sie diese Seite auszuführen, nachdem die tatsächliche src für den iframe von Ihrem Server authSample ersetzen .html URL
Wenn Sie es in verschiedenen Browsern ausführen, werden Sie unterschiedliche Verhaltensweisen für den Fehler bemerken. Ich habe versucht, die Tatsache auszunutzen, dass die Popups erlaubt sind, aber es scheint, dass Browser die Tatsache, dass das geöffnete Fenster auch in einer Sandbox-Umgebung geöffnet werden sollte, anders implementiert haben.
Ich möchte vermeiden, meine eigenen Webservices für die Authentifizierung zu schreiben. Darüber hinaus glaube ich, dass Nutzer ihre Anmeldeinformationen auf der üblichen Google-Webseite (mit einer URL accounts.google.com) sicherer eingeben würden. Wenn Sie eine Idee haben, die mit aktuellen Browsern funktionieren könnte, können Sie sie gerne einreichen.
Danke
Ihre Antwort beschreibt, wie Sie eine Verbindung zu einer MySQL-Datenbank herstellen, aber das OP versucht speziell, das Google Analytics-API zu verwenden. –