Not: Aşağıdakiler zaman gecikmesinden kaçınmak için iyidir - tam zamanında. Örnek genel olarak tüm betikler tarafından kullanılabilir (buna ihtiyaç duyar), ancak özellikle Greasemonkey ile birlikte kullanılmıştır. Aynı zamanda örnek olarak Google grafik API'sini kullanır, ancak bu çözüm diğer Google API'lerinin ötesine geçer ve bir komut dosyasının yüklenmesini beklemeniz gereken her yerde kullanılabilir.
Bir geri arama ile google.load kullanılması, bir Google grafiği eklemek için Greasemonkey kullanıldığında sorunu çözmedi. Süreçte (sayfaya Greasemonkey enjekte edildi), www.google.com/jsapi komut dosyası düğümü eklenir. Google'ın jsapi javascript'i için bu öğeyi ekledikten sonra, enjekte edilen (veya sayfa) komut dosyası google.load komutunu (eklenen düğüme yüklenmesi gereken) kullanmaya hazırdır, ancak bu jsapi betiği henüz yüklenmedi. Bir zaman aşımı ayarı işe yaradı, ancak zaman aşımı, Google jsapi komut dosyası yüklemesinin enjekte / sayfa komut dosyasıyla zamanlama yarışı için yalnızca bir geçici çözümdü. Bir komut dosyasının google.load'u (ve muhtemelen google.setOnLoadCallback) yürüttüğü yerde hareket etmek, zamanlama yarış durumunu etkileyebilir. Aşağıda, google.load çağrılmadan önce google script öğesinin yüklenmesini bekleyen bir çözüm önerilmektedir. İşte bir örnek:
// ********* 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";