非常に便利な Google 翻訳の翻訳要素を Web ページに埋め込もうとしています。これは非常にシンプルでうまく機能しますが、結果の HTML に表示されるデフォルトのテキストを変更する必要があります。
多数の Google API と 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) は正常に読み込まれたように見えますが (ただし、翻訳要素はまったくありません)、その後フリーズし、メモリをむさぼり食い始め、クラッシュします。
この innerHTML 置換を機能させる方法について何か考えはありますか? もちろん優先される - のようなプロパティを知っている場合displayLabel : "Translate"
、それを除いて (そして本当に醜いsetTimeout
ハック)、これを機能させる方法はありますか?