103 votes

Pourquoi google.load provoque ma page vierge ?

Eh bien, cela semble étrange, mais je ne suis pas en mesure de trouver une solution.

Pourquoi le monde ce violon http://jsfiddle.net/carlesso/PKkFf/ montre le contenu de la page et, puis, en cas de google.load, la page est vide ?

Cela fonctionne bien si le google.load se fait immédiatement, mais l’avoir retardé ne fonctionne pas du tout.

Voici la source de la page pour les plus paresseux (ou la plus intelligente) d'entre vous :

109voto

wave Points 989

Ressemble à google.la charge est d'ajouter le script de la page à l'aide d'un document.write(), qui, si utilisé après le chargement de la page, efface le code html.

C'est ce qui explique plus en profondeur: http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/e07c2606498094e6

À l'aide de l'une des idées, vous pouvez utiliser une fonction de rappel pour la charger de le forcer ajouter utiliser plutôt que de doc.écrire:

setTimeout(function(){google.load('visualization', '1', {'callback':'alert("2 sec wait")', 'packages':['corechart']})}, 2000);

Cela démontre la 2 deuxième attendre avec le retard de la fenêtre d'alerte

32voto

Katai Points 605

La question est assez vieux, mais il apparaît encore si l'on cherche à résoudre un problème similaire :

Il vous suffit de définir un rappel, et il n’effacera pas la page (peut-être les anciennes versions de Google.Load () l’a fait, mais apparemment le nouveau font ne pas si utilisé avec rappel). Voici un exemple simplifié lorsque je suis chargement la lib « google.charts » :

Quand faire whitout callback(), je reçois toujours la page blanche trop - mais avec rappel, il est fixé pour moi.

5voto

Stephan Warren Points 26

Note: ce qui suit est bon pour éviter un temps de retard - c'est juste à temps. L'exemple peut être utilisée de manière générale par tous les scripts (dans le besoin), mais a été particulièrement utilisé avec Greasemonkey. Il utilise également l'API Google chart comme un exemple, mais cette solution va au-delà de à d'autres Api Google et peut être utilisé n'importe où vous avez besoin d'attendre pour un script à charger.

À l'aide de google.charge avec un rappel ne résout pas le problème lors de l'utilisation de Greasemonkey pour ajouter un Google chart. Dans le processus (Greasemonkey injecté dans la page), le www.google.com/jsapi script nœud est ajouté. Après l'ajout de cet élément pour Google jsapi javascript, l'injection (ou page) le script est prêt à utiliser le google.commande de chargement (qui doit être chargé dans le nœud ajouté), mais ce jsapi script qui ne fonctionne pas encore. Réglage de la temporisation travaillé, mais le délai d'attente était simplement une solution de contournement pour le Google jsapi script charge du chronométrage de la course avec l'injection/script de page. Se déplaçant autour de l'endroit où un script s'exécute google.charge (et éventuellement de google.setOnLoadCallback) peuvent influer sur le calendrier de la course de la situation. La suite offre une solution qui attend le script google élément à charge avant l'appel de google.de la charge. Voici un exemple:

// ********* INJECTED SCRIPT *********//
// add element
var gscript = document.createElement('script');
gscript.setAttribute("type", "application/javascript");
gscript.setAttribute("id", "XX-GMPlusGoogle-XX");
document.body.appendChild(gscript);

// event listener setup     
gscript.addEventListener("load",    
    function changeCB(params) {
        gscript.removeEventListener("load", changeCB);
        google.load("visualization", "1", {packages:["corechart"], "callback": 
            function drawChart() {
                var data;
                // set the durationChart data (not in example)
                data = new google.visualization.arrayToDataTable(durationChart);

                var options = {
                    title:"Chart Title",
                    legend: {position:"none"},
                    backgroundColor:"white",
                    colors:["white","Blue"],
                    width: window.innerWidth || document.body.clientWidth,
                    height: window.innerHeight || document.body.clientHeight,
                    vAxis: {title: "Durations", baselineColor: "black", textStyle:{fontSize:12}},
                    hAxis: {title: "Days Since First Instance"},
                    height: ((cnt > 5)? cnt * 50 : 300),
                    isStacked: true
                }; // options


                // put chart into your div element
                var chart = new google.visualization.BarChart(document.getElementById('XX-ChartDiv-XX'));
                chart.draw(data, options);
            } // drawChart function
        }); //packages within google.load & google load
    } // callback changeCB
);

// can use SSL as "https://www.google.com/jsapi";
gscript.src = "http://www.google.com/jsapi";

2voto

Vous n’avez pas besoin de définir le délai d’attente. Il y a une autre manière :

Explication :

sera exécutée après le script de chargement réussi de JSAPI, puis alert() sera exécutée après succès Google.Load)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X