Catatan: Berikut ini bagus untuk menghindari penundaan waktu - ini tepat waktu. Contoh ini dapat digunakan secara umum oleh semua skrip (membutuhkannya), tetapi secara khusus digunakan dengan Greasemonkey. Ini juga menggunakan API bagan Google sebagai contoh, tetapi solusi ini melampaui API Google lainnya dan dapat digunakan di mana pun Anda perlu menunggu skrip dimuat.
Menggunakan google.load dengan callback tidak menyelesaikan masalah saat menggunakan Greasemonkey untuk menambahkan bagan Google. Dalam proses (Greasemonkey dimasukkan ke halaman), node skrip www.google.com/jsapi ditambahkan. Setelah menambahkan elemen ini untuk javascript jsapi Google, skrip yang dimasukkan (atau halaman) siap menggunakan perintah google.load (yang perlu dimuat di simpul yang ditambahkan), tetapi skrip jsapi ini belum dimuat. Menyetel batas waktu berhasil, tetapi batas waktu hanyalah solusi untuk balapan waktu pemuatan skrip Google jsapi dengan skrip / halaman yang dimasukkan. Bergerak di sekitar tempat skrip mengeksekusi google.load (dan mungkin google.setOnLoadCallback) dapat memengaruhi situasi balapan waktu. Berikut ini menawarkan solusi yang menunggu elemen skrip google dimuat sebelum memanggil google.load. Berikut ini contohnya:
// ********* 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";