2015-08-20 3 views
2

Я пытаюсь добавить дополнительную функцию к модулю Gtranslate в Drupal, чтобы сделать его как блок переключения языка. При щелчке по блоку gtranslate URL-адрес также будет перенаправлен на нужную версию языка, например, ****/es/****. Тем самым я могу использовать модуль gtranslate для несущественного текста, но использовать трансляцию сущности для обеспечения точного перевода людей для важного контента.Модуль Gtranslate «Невозможно прочитать свойство« G »неопределенной» ошибки в Chrome

Я делаю это, создавая новый js и присоединяю событие click к элементу блока gtranslate. Я использую

window.location.replace(); 

, чтобы перенаправить страницу. Функция отлично работает в Firefox. Однако в Chrome он работает случайным образом. (Перенаправление всегда работает, но Google Translate кадр не показывает где-то.)

Журнал консоли поймать ошибку, которая

"Uncaught TypeError: Cannot read property 'G' of undefined". 

Перевод кадра Google также JS файл. И рамка перевода отображается iframe. Я уже пробовал

$('iframe').load(function(){...}); 

Но это отключит код перенаправления. Не знаю, куда я должен идти сейчас.

Надеюсь, что кто-то встретит ту же проблему раньше и предоставит вам решение.

Большое спасибо.

ответ

0

В случае, если кто-то сталкивается с той же проблемой, вот мое решение этой проблемы.

Это вызвано асинхронный сценарий загрузки заказа. Скрипт google translate загружается из Google CDN, пользовательский скрипт загружается из Drupal. Обычно пользовательский скрипт загружается быстрее, чем скрипт перевода Google. Поэтому, когда вы запускаете событие трансляции google в своем пользовательском скрипте, он не может найти переменные в скрипте google translate.

Идеальное решение будет использовать функцию promise или callback, чтобы сделать асинхронную нагрузку в правильном порядке. Когда я это исправил, у меня не было таких знаний. Поэтому я просто использую setTimeOut(function() {}, 500) для запуска моего собственного скрипта асинхронно после загрузки загруженного скрипта google.

Это не идеальное или даже хорошее решение, но он сделал то, что я хочу. Если я столкнусь с подобной проблемой, я опубликую свое лучшее решение в будущем.

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