我正在尝试将在WordPress / Drupal世界中流行的Google Translate插件(gtranslate)移植到React应用程序中。他们提供了一些老式的HTML嵌入代码,但是它是p,a,c,k并包装在CDATA中,因此我无法从React组件调用其主要功能。有没有办法在React组件中使用此代码?
我尝试了各种变体,但我无法正常工作的代码发布在下面,以供参考。
import React from "react";
const Translate = class extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
doGTranslate(this);
}
render() {
return (
<>
<h1>Hello world</h1>
<p>I shall be translated.</p>
<select onChange={this.handleChange}><option value="">Select Language</option><option value="en|af">Afrikaans</option><option value="en|sq">Albanian</option><option value="en|ar">Arabic</option><option value="en|hy">Armenian</option></select><div id="google_translate_element2"></div>
<script type="text/javascript">
{`
function googleTranslateElementInit2() {new google.translate.TranslateElement({pageLanguage: 'en',autoDisplay: false}, 'google_translate_element2');}
`}
</script>
/* This is where doGTranslate is defined! */
<script type="text/javascript">
{`
/* <![CDATA[ */
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('6 7(a,b){n{4(2.9){3 c=2.9("o");c.p(b,f,f);a.q(c)}g{3 c=2.r();a.s(\'t\'+b,c)}}u(e){}}6 h(a){4(a.8)a=a.8;4(a==\'\')v;3 b=a.w(\'|\')[1];3 c;3 d=2.x(\'y\');z(3 i=0;i<d.5;i++)4(d[i].A==\'B-C-D\')c=d[i];4(2.j(\'k\')==E||2.j(\'k\').l.5==0||c.5==0||c.l.5==0){F(6(){h(a)},G)}g{c.8=b;7(c,\'m\');7(c,\'m\')}}',43,43,'||document|var|if|length|function|GTranslateFireEvent|value|createEvent||||||true|else|doGTranslate||getElementById|google_translate_element2|innerHTML|change|try|HTMLEvents|initEvent|dispatchEvent|createEventObject|fireEvent|on|catch|return|split|getElementsByTagName|select|for|className|goog|te|combo|null|setTimeout|500'.split('|'),0,{}))
/* ]]> */
`}
</script>
</>
)
}
}
export default Translate
我希望在我的SELECT列表的onChange上触发从事件处理程序调用的doGTranstlate
函数。
相反,我得到doGTranslate is undefined
。 doGTranslate
函数本身似乎嵌入在脚本的p,a,c,k,e,d部分中。
注意:如果将事件处理程序更改为alert()或console.log()可以正常工作,则无法获取它来触发此嵌入式功能。