Что ж, это выглядит странно, но я не могу найти решение.
Почему эта скрипка http://jsfiddle.net/carlesso/PKkFf/ показывает содержимое страницы, а затем, когда происходит google.load, страница становится пустой?
Это хорошо работает, если google.load выполняется немедленно, но отложить его не получится.
Вот источник страницы для более ленивых (или более умных) из вас:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Ciao</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
</head>
<body>
<h1>Test</h1>
<div id="quicivanno">
<p>ciao</p>
</div>
</body>
<script type="text/javascript">
setTimeout(function() {google.load('visualization', '1.0', {'packages':['corechart']});}, 2000);
</script>
</html>
javascript
google-visualization
google-loader
Энрико Карлессо
источник
источник
Ответы:
Похоже, google.load добавляет скрипт на страницу с помощью document.write (), который, если он используется после загрузки страницы, стирает HTML.
Это объясняет более подробно: http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/e07c2606498094e6
Используя одну из идей, вы можете использовать обратный вызов для загрузки, чтобы заставить ее использовать append, а не doc.write:
Это демонстрирует 2-секундное ожидание с окном отложенного предупреждения.
источник
Вам просто нужно определить обратный вызов, и он не очистит страницу (возможно, старые версии google.load () сделали это, но, очевидно, новые не работают, если используются с обратным вызовом). Вот упрощенный пример, когда я загружаю библиотеку "google.charts":
Когда я делаю это без callback (), я все равно получаю пустую страницу, но с обратным вызовом это исправлено для меня.
источник
Примечание. Следующее помогает избежать задержки по времени - это как раз вовремя. Этот пример может использоваться в целом всеми скриптами (в которых он нужен), но особенно использовался с Greasemonkey. Он также использует API диаграмм Google в качестве примера, но это решение выходит за рамки других API Google и может использоваться везде, где вам нужно дождаться загрузки скрипта.
Использование google.load с обратным вызовом не решило проблему при использовании Greasemonkey для добавления диаграммы Google. В процессе (Greasemonkey вводится на страницу) добавляется узел сценария www.google.com/jsapi. После добавления этого элемента для jsapi javascript Google внедренный сценарий (или страница) готов к использованию команды google.load (которую необходимо загрузить в добавленный узел), но этот сценарий jsapi еще не загрузился. Установка тайм-аута сработала, но тайм-аут был просто обходным путем для гонки времени загрузки скрипта Google jsapi с внедренным скриптом / page. Перемещение в том месте, где скрипт выполняет google.load (и, возможно, google.setOnLoadCallback), может повлиять на ситуацию гонки по времени. Ниже предлагается решение, которое ожидает загрузки элемента скрипта Google перед вызовом google.load. Вот пример:
источник
Вам не нужно устанавливать тайм-аут. Есть еще один способ:
Пояснение:
будет выполняться после успешной загрузки JSAPI-скрипта, затем alert () будет выполнен после успешной загрузки google.load ()
источник
Я столкнулся с этой проблемой при попытке переместить
google.load(…)
внутри$(document).ready(…)
оболочки jQuery . Перемещениеgoogle.load(…)
назад за пределы функции готовности, чтобы она выполнялась немедленно, решила проблему.Например, это не работает:
Но это действительно так:
источник