2017-01-10 3 views
0

Я хотел бы добавить окно пользовательского поиска Google на моем сайте, которое создается с помощью ReactJS. Таким образом, пользователь может искать контент как внутри сайта, так и в Интернете.Как включить окно пользовательского поиска Google в компоненте React

Google сгенерированный код будет что-то вроде:

<script> 
    (function() { 
    var cx = '013626029679071:ze3ta4'; 
    var gcse = document.createElement('script'); 
    gcse.type = 'text/javascript'; 
    gcse.async = true; 
    gcse.src = 'https://cse.google.com/cse.js?cx=' + cx; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(gcse, s); 
    })(); 
</script> 
<gcse:search></gcse:search> 

Есть ли способ, чтобы добавить это в React компонент? Он продолжает говорить SyntaxError. Я попытался создать компонент для вышеуказанного кода и использовать его в компоненте React, но ничего не отображается. Это правильный способ добавить поисковую панель на сайт React? Любые намеки?

Спасибо!

+0

Да, конечно ... Оберните HTML тег «GCSE: поиск» внутри DIV в методе визуализации, и вызвать код Anonimous функции в методе componentdidmount компонента, ОК? – chemitaxis

+0

Если это не работает, вы можете использовать refs, чтобы заменить элемент доступа к валиду javascript. Дополнительная информация: https://facebook.github.io/react/docs/refs-and-the-dom.html – chemitaxis

+0

@chemitaxis благодарит за ответ, но упаковка html-тега «gsce: search» не работает, потому что это имеет ошибку «Теги пространства имен не поддерживаются. ReactJSX не является XML». ты это сделал раньше? – Lisa

ответ

0

Я думаю, что у меня есть решение для вас, не используя riskouslySetInnerHTML. Поместите свой код в блоке componentDidMount и присоединять к элементу с JQuery, как так:

componentDidMount(){ 
const embedcode = `<script> 
     (function() { 
     var cx = '013626029654558379071:ze3tw4csia4'; 
     var gcse = document.createElement('script'); 
     gcse.type = 'text/javascript'; 
     gcse.async = true; 
     gcse.src = 'https://cse.google.com/cse.js?cx=' + cx; 
     var s = document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(gcse, s); 
     })(); 
    </script> 
    <gcse:search></gcse:search>` 

    $('#gsearch').html(embedcode) 
    } 

И ваш DOM элемент:

<div id='gsearch'> 
</div> 

Тем не менее некоторые отладки для укладки материала, но это работает!

Бест, Патрик