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";