Обычно, когда у меня есть что-то подобное ниже на странице HTML, это работает нормально. Блок локального сценария выполняется только после завершения загрузки внешнего блока сценария.
<div id="curve_chart" style="width: 900px; height: 500px"></div>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]);
var options = {
title: 'Company Performance',
curveType: 'function',
legend: { position: 'bottom' }
};
var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, options);
}
</script>
Однако, если я возьму приведенный выше код и добавлю его в контейнер DIV следующим образом:
$("#some_element").append($.parseHTML([code from above here], document, true));
Это дает мне сообщение «Uncaught ReferenceError: google is not defined». Я думаю, проблема в том, что при добавлении этого фрагмента кода, как этот, либо порядок тегов сценария не соблюдается, либо он просто загружает все теги сценария параллельно?!
Теперь я знаю, что есть обходные пути к этому (в основном с использованием $ .getScript и обратного вызова), но я хотел бы знать, почему это именно так, и есть ли способ заставить его работать так, как ожидалось.