Не удается загрузить Google JSPAI, но только для клиентов

Мой веб-сайт должен использовать плагин Google Планета Земля немного дольше (я знаю, API устарел, но я застрял с ним еще несколько месяцев). Я загружаю его, включая google.com/jsapi, затем звоню google.load вот так:

    ...
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("earth", "1", {"other_params": "sensor=false"});
        google.setOnLoadCallback(function () {
            // call some JavaScript to begin initializing the GE plugin
        });
    </script>
</body>
</html>

Это хорошо работает с нескольких компьютеров и с несколькими браузерами внутри брандмауэра нашей компании. Он хорошо работает с моего домашнего компьютера и с домашних компьютеров моих коллег. Однако, когда мой клиент пытается загрузить его, он получает сообщение об ошибке, что Google не определен в строке, которая начинается google.load(,

Конечно, глобальная переменная google определяется в начале файла www.google.com/jsapi, поэтому, предположительно, этот файл не загружается. Сначала я предположил, что ее корпоративный брандмауэр блокирует этот файл, но когда я попросил ее вставить " https://www.google.com/jsapi" в адресную строку своего браузера, она сказала, что сразу загрузил страницу JavaScript.

Весь вывод на консоль браузера:

Invalid URI. Load of media resource  failed. main.html
ReferenceError: google is not defined main.html:484

И я считаю, что бизнес Invalid URI только потому, что у нас нет файла favicon.ico.

Она использует Firefox 35.0.1, хотя и говорит, что та же ошибка произошла с IE (она не упомянула версию IE).

Если не попросить ее установить Firebug, что, я думаю, не осуществимо, как я могу устранить эту проблему?

4 ответа

Я действительно не уверен с этим предположением, но: может ли быть так, что ваш первый скрипт загружается асинхронно? Тогда для медленных соединений (ваш клиент) эта проблема возникнет (я знаю, что вы не используете асинхронный тег - но, возможно, источник может инициировать загрузку асинхронного).

Лучше всего убедиться, что используемый вами код Google sync вид и перераспределение.

Также https://bugsnag.com/ может быть действительно интересным инструментом для вас. Просто внедрите js, и вы сможете отслеживать каждую ошибку, которую получает ваш клиент.

Повторно разверните ваш код следующим образом:

<script type="text/javascript">
   try {
      google.load("earth", "1", {"other_params": "sensor=false"});
      google.setOnLoadCallback(function () {
        // call some JavaScript to begin initializing the GE plugin
      });
    } catch (e) {
        $.post('http://<your-remote-debug-script-or-service>',e)
    }
</script>

Затем, когда ваш клиент обнаружит ошибку, полная информация будет отправлена ​​непосредственно на ваш сервер, и вы сможете устранить неполадки при необходимости.

Можете ли вы попробовать внешний скрипт, который загружает Google jsapi, а затем поместить свой код в обратный вызов, чтобы убедиться, что он загружен?

<script type="text/javascript">

function loadScript(url, callback){

    var script = document.createElement("script")
    script.type = "text/javascript";

    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

loadScript("https://www.google.com/jsapi", function(){
    google.load("earth", "1", {"other_params": "sensor=false"});
    google.setOnLoadCallback(function () {
        // call some JavaScript to begin initializing the GE plugin
    });
});
</script>

(Изменено с http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/)

Вы также можете посмотреть на jsapi Auto-Loading, чтобы минимизировать то, что загружено, но это может быть сложно с более старой библиотекой. https://developers.google.com/loader/

Это может быть что-то столь же простое, поскольку браузер клиента блокирует выполнение JavaScript. Может быть, специально заблокировать ваш домен или что-то в этом роде.

Другие вопросы по тегам