Клуб Яндекс.Поиска для сайта

Как встроить поиск на сайт, где inline скрипты запрещены CSP

Сергей Матюнин
17 октября 2016, 13:54

Собственно, сабж. Я понимаю примерно, что сами скрипты можно перенести в файл, это несложно. Но вот переписать onclick с кучей параметров во внешнюю функцию - такого я не умею. Было бы здорово, если бы в помощи был раздел, посвященный этому вопросу. В яндекс-метрике такое имеется.

7 комментариев
Подписаться на комментарии к посту
А вы поиск для магазина или обычный поиск хотите интегрировать? 
Сергей Матюнин
17 октября 2016, 13:57
firstlena.pershina,
Обычный.
Сергей Матюнин,
Добрый день!
О проблеме знаем и на своей стороне её решать планируем. Но, боюсь, не очень скоро. Что тут можно посоветовать. Например, взять свою форму поиска (например, как тут: http://gov.spb.ru/search/?text=%D0%BF%D0%B8%D1%82%D0%B5%D1%80&site=gov.spb.ru&searchid=2166815&web=0 – в самом верху страницы), а результаты выводить в IFRAME. Увы, по созданию собственной формы я посоветовать ничего более конкретного не могу, так как мы обычно не рекомендуем её создавать. В данном случае привожу этот пример как исключение, которое должно помочь с решением проблемы. 
Сергей Матюнин
17 октября 2016, 18:06
firstlena.pershina,
Я вроде сделал, примерно так:


(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0],e=d.documentElement;if((' '+e.className+' ').indexOf(' ya-page_js_yes ')===-1){e.className+=' ya-page_js_yes';}s.type='text/javascript';s.async=true;s.charset='utf-8';s.src=(d.location.protocol==='https:'?'https:':'http:')+'//site.yandex.net/v2.0/js/all.js';h.parentNode.insertBefore(s,h);(w[c]||(w[c]=[])).push(function(){Ya.Site.Form.init()})})(window,document,'yandex_site_callbacks');
(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0];s.type='text/javascript';s.async=true;s.charset='utf-8';s.src=(d.location.protocol==='https:'?'https:':'http:')+'//site.yandex.net/v2.0/js/all.js';h.parentNode.insertBefore(s,h);(w[c]||(w[c]=[])).push(function(){Ya.Site.Results.init();})})(window,document,'yandex_site_callbacks');
if ($("#yaphoto").length > 0){
var YaSearchPhotocrew = document.getElementById('yaphoto');
YaSearchPhotocrew.onclick = function() {
return {'action':'https://photocrew.ru/search.html','arrow':true,'bg':'#01dfed','fontsize':14,'fg':'#000000','language':'ru','logo':'rb','publicname':'Поиск по photocrew.ru','suggest':true,'target':'_self','tld':'ru','type':2,'usebigdictionary':true,'searchid':2283415,'input_fg':'#000000','input_bg':'#ffffff','input_fontStyle':'normal','input_fontWeight':'normal','input_placeholder':'Поиск по сайту','input_placeholderColor':'#cccccc','input_borderColor':'#7f9db9'}}}
if ($("#ya-site-results").length > 0){
var YaSearchResult = document.getElementById('ya-site-results');
YaSearchResult.onclick = function() {
return {'tld':'ru','language': 'ru','encoding': '','htmlcss': '1.x','updatehash': false}}}


Вроде работает, правда сыпет в консоль ошибками невозможность выполнения каких-то скриптов, которые подтягиваются, но все работает.
Сергей Матюнин,
А можете сайт показать, хочется посмотреть реализацию? 
Сергей Матюнин
26 октября 2016, 18:19
firstlena.pershina,
https://photocrew.ru/