Das sieht seltsam aus, aber ich kann keine Lösung finden.
Warum in aller Welt zeigt diese Geige http://jsfiddle.net/carlesso/PKkFf/ den Seiteninhalt an, und wenn google.load auftritt, wird die Seite leer?
Es funktioniert gut, wenn google.load sofort ausgeführt wird, aber eine Verzögerung funktioniert überhaupt nicht.
Hier die Seitenquelle für den Faulen (oder Klügeren) von Ihnen:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Ciao</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
</head>
<body>
<h1>Test</h1>
<div id="quicivanno">
<p>ciao</p>
</div>
</body>
<script type="text/javascript">
setTimeout(function() {google.load('visualization', '1.0', {'packages':['corechart']});}, 2000);
</script>
</html>
javascript
google-visualization
google-loader
Enrico Carlesso
quelle
quelle
Antworten:
Es sieht so aus, als würde google.load das Skript mithilfe von document.write () zur Seite hinzufügen. Wenn es nach dem Laden der Seite verwendet wird, wird das HTML gelöscht.
Dies wird ausführlicher erläutert: http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/e07c2606498094e6
Mit einer der Ideen können Sie einen Rückruf für das Laden verwenden, um die Verwendung von append anstelle von doc.write zu erzwingen:
Dies zeigt das Warten von 2 Sekunden mit dem verzögerten Alarmfenster
quelle
Sie müssen nur einen Rückruf definieren, und die Seite wird nicht gelöscht (möglicherweise haben es die älteren Versionen von google.load () getan, aber anscheinend nicht die neuen, wenn sie mit Rückruf verwendet werden). Hier ein vereinfachtes Beispiel beim Laden der lib "google.charts":
Wenn ich es ohne Rückruf () mache, bekomme ich auch immer noch die leere Seite - aber mit Rückruf ist es für mich behoben.
quelle
Hinweis: Das Folgende ist gut, um eine Zeitverzögerung zu vermeiden - es ist gerade noch rechtzeitig. Das Beispiel kann allgemein von allen Skripten verwendet werden (die es benötigen), wurde jedoch insbesondere bei Greasemonkey verwendet. Es wird auch die Google-Diagramm-API als Beispiel verwendet. Diese Lösung geht jedoch über andere Google-APIs hinaus und kann überall dort verwendet werden, wo Sie auf das Laden eines Skripts warten müssen.
Die Verwendung von google.load mit einem Rückruf hat das Problem bei der Verwendung von Greasemonkey zum Hinzufügen eines Google-Diagramms nicht gelöst. Dabei wird der Skriptknoten www.google.com/jsapi hinzugefügt (Greasemonkey in Seite eingefügt). Nach dem Hinzufügen dieses Elements für das jsapi-Javascript von Google kann das injizierte (oder Seiten-) Skript den Befehl google.load verwenden (der in den hinzugefügten Knoten geladen werden muss), dieses jsapi-Skript wurde jedoch noch nicht geladen. Das Festlegen eines Timeouts funktionierte, aber das Timeout war nur eine Problemumgehung für das Timing-Rennen des Google jsapi-Skriptladens mit dem injizierten / page-Skript. Wenn Sie sich dort bewegen, wo ein Skript google.load (und möglicherweise google.setOnLoadCallback) ausführt, kann dies die Situation des Timing-Rennens beeinflussen. Im Folgenden wird eine Lösung angeboten, die darauf wartet, dass das Google Script-Element geladen wird, bevor google.load aufgerufen wird. Hier ist ein Beispiel:
quelle
Sie müssen kein Timeout festlegen. Es geht auch anders:
Erläuterung:
wird nach erfolgreichem Laden des JSAPI-Skripts ausgeführt, und alert () wird nach erfolgreichem google.load () ausgeführt.
quelle
Dieses Problem trat auf, als ich versuchte, einen
google.load(…)
in einen jQuery-$(document).ready(…)
Wrapper zu verschieben. Wenn Sie diegoogle.load(…)
Rückseite außerhalb der Bereitschaftsfunktion verschieben, damit sie sofort ausgeführt wird, wurde das Problem behoben.Dies funktioniert beispielsweise nicht:
Aber das tut:
quelle