Я пытаюсь встроить очень удобный элемент Google Translate translate в веб-страницу, которая очень проста и отлично работает, но мне нужно изменить текст по умолчанию, который отображается в полученном HTML:
Поработав с несколькими API-интерфейсами Google и библиотеками js, я подумал, что это не составит проблемы, поскольку почти наверняка его можно будет настроить, но, посмотрев некоторое время, я не могу найти никакой ссылки насвойство, которое позволяет вам установить это, и документация в целом кажется жалкой.Базовый код:
<div id="google_translate_element"></div>
<script>
function googleTranslateElementInit() {
var translator = new google.translate.TranslateElement({
pageLanguage: 'en',
autoDisplay: false,
multilanguagePage: false,
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
}
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
Не имея возможности установить его как свойство в момент создания translator
, я решил взломать его и использовать прослушиватель onDOMNodeInserted
, чтобы просто изменитьполученный HTML-код после загрузки в <div id="google_translate_element"></div>
.Я использую jQuery здесь, поэтому мой код:
$(document).ready(function(){
$('#google_translate_element').bind('DOMNodeInserted', function(event) {
$('.goog-te-menu-value span:first').html('Translate');
});
})
И вот тут все становится интересным.Chrome прекрасно загружает все и прекрасно выполняет замену innerHTML.Internet Explorer (8) полностью игнорирует прослушиватель DOMNodeInserted, и страница загружается, как если бы функция jQuery никогда не вызывалась.Firefox (10) загружается нормально (но без элемента translate), а затем зависает, начинает сжимать память и вылетает.
Есть какие-нибудь мысли о том, как заставить эту замену innerHTML работать?Если вам известно о displayLabel : "Translate"
-подобном свойстве, которое, конечно, предпочтительнее, но, за исключением этого (и действительно безобразного setTimeout
хака), есть ли способ заставить это работать?