2014-10-16 2 views
0

Я хочу настроить интернационализацию на автозаполнение google place. Выбрав язык, приложение должно загрузить правильный google api для этого языка.google maps api после вызова загрузки страницы

Теперь у меня есть этот JS код:

function loadScript(src) { 
    var script = document.createElement("script"); 
    document.body.appendChild(script); 
    script.src = src; 
}; 

$('#' + country_id).change(function(){ 
      delete google.maps; 
      $('script').each(function() { 
       if (this.src.indexOf('googleapis.com/maps') >= 0 
        || this.src.indexOf('maps.gstatic.com') >= 0 
        || this.src.indexOf('earthbuilder.googleapis.com') >= 0) { 
         // console.log('removed', this.src); 
         $(this).remove(); 
        } 
      }); 
      loadScript("http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false&language=" + this.value); 
      setTimeout(function(){ google_address(input_id, options_type, country_id, auto_complete) }, 2000); 
    }); 

где GOOGLE_ADDRESS функция используется для настройки автозаполнения. это решение не работает, и бросить мне ошибку на хроме:

Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened. 

также пытались использовать google.load, но с не большим успехом ...

Любая идея будет очень приветствуется.

+1

Почему -1? это не честно... – knotito

ответ

0

Проблема была в документе document.write, вызываемом скриптом для загрузки api. Эта функция не может быть вызвана из загрузки страницы. Отсюда и ошибка.

Благодаря this example Я сделал пользовательские загрузчики для каждого языка с document.body.appendChild.

Мне нужно было удалить pac-контейнер, чтобы отменить предыдущий выбор языка.

0

Простое добавление параметра обратного вызова к вызову предотвратит эту ошибку.

Отметьте, что "after page loading" == "asynchronous"

Смежные вопросы