Lưu ý: Điều sau đây là tốt để tránh chậm trễ thời gian - đúng lúc. Ví dụ này có thể được sử dụng chung bởi tất cả các script (cần nó), nhưng đặc biệt được sử dụng với Greasemonkey. Nó cũng sử dụng API biểu đồ Google làm ví dụ, nhưng giải pháp này vượt xa các API Google khác và có thể được sử dụng ở bất cứ nơi nào bạn cần phải chờ tập lệnh tải.
Sử dụng google.load với gọi lại không giải quyết được vấn đề khi sử dụng Greasemonkey để thêm biểu đồ Google. Trong quá trình (Greasemonkey được đưa vào trang), nút tập lệnh www.google.com/jsapi được thêm vào. Sau khi thêm phần tử này cho javascript jsapi của Google, tập lệnh được chèn (hoặc trang) đã sẵn sàng sử dụng lệnh google.load (cần được tải trong nút được thêm), nhưng tập lệnh jsapi này chưa tải. Đặt thời gian chờ đã hoạt động, nhưng thời gian chờ chỉ là giải pháp cho cuộc đua thời gian tải tập lệnh jsapi của Google với tập lệnh được chèn/trang. Di chuyển xung quanh nơi một tập lệnh thực hiện google.load (và có thể google.setOnLoadCallback) có thể ảnh hưởng đến tình hình cuộc đua thời gian. Sau đây là một giải pháp chờ đợi cho phần tử google script tải trước khi gọi google.load. Dưới đây là một ví dụ:
// ********* 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";
đẹp câu hỏi, đây là một liên kết: http://friendlybit.com/js/lazy-loading -asyncronous-javascript/(nói cách khác: chưa có đầu mối) – mindandmedia
tôi nhận thấy rằng document.write ('bất cứ điều gì') nào cũng sẽ xóa html trước đó, có thể tài liệu nằm ngoài khoảng trống trong bối cảnh định giờ? – mindandmedia