如何将老式的(以及p,a,c,k,e,d)JavaScript代码片段嵌入到React组件中?

时间:2019-07-12 21:42:07

标签: reactjs

我正在尝试将在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 undefineddoGTranslate函数本身似乎嵌入在脚本的p,a,c,k,e,d部分中。

注意:如果将事件处理程序更改为alert()或console.log()可以正常工作,则无法获取它来触发此嵌入式功能。

0 个答案:

没有答案