5

У нас есть пользовательские SearchBar на нашем сайте, и я заметил, что иногда (9/10 Times) JS выбросит эту ошибку, которая заставляет содержимое, которое вы искали, чтобы не оказыватьGoogle WebSearch API пользовательского поиска бросками TypeErrors

www.googleapis.com/customsearch/v1element?key=AIzaSyCVAXiUzRYsML1Pv6RwSG1gu…oogle.com&callback=google.search.Search.apiary####&nocache=1446053383742:2

Uncaught TypeError: google.search.Search.apiary#### is not a function

страница поиска, когда генерируется ошибка: Search page when error is thrown

страница поиска с ошибкой усеченного/решена Search page when error is truncated or resolved

Но если бы я должен был обновить или исследовать, эта ошибка будет превзойдена и отобразит все мои поисковые запросы. Просмотрев файл, я узнал, что google.search.Search.apiary####, на который они ссылаются, упоминается только один раз. Поэтому я считаю, что эта ошибка обрезает весь файл , когда он появляется. Что может быть причиной этого, каковы будут некоторые варианты его исправления?

+0

Большое спасибо за предлагаемое решение.По сути, мы используем простой HTML TEXT на всех наших страницах, а затем перенаправляем поисковый запрос на конкретную страницу только для поиска. На этой странице поиска у нас есть окно поиска Google (сгенерированное скриптом) и результаты поиска. Я считаю, что сценарий, который запускался дважды, вызывал проблему для нас. Я удалил один из них и, похоже, работает в это время. Большое спасибо за его документирование. –

ответ

10

Хорошо, я наткнулся на ответ: -

После этого еще некоторое исследование, я обнаружил, что this user on Google Forums также имеет один и тот же вопрос.

Проще говоря, как это работает, вы используете <script> для создания поисковой панели.

У вас есть эта функция + HTML элемент для вашей панели поиска

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

<gcse:searchbox-only resultsUrl="/search-results"></gcse:searchbox-only> 

Таким образом, мы сформировали бар в нашем <div class="header">, который является HAML элементом, как часть шаблона. Поэтому он всегда загружался в каждый заголовок. Поскольку у нас есть 10 страниц, этот же скрипт был создан 1 раз на странице.

Наш CSE Google создан для поиска, а затем перенаправления на url /search-results, где он генерирует результаты.

Для генерации результатов, вам необходима эта функция и HTML

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

который так же, как один загружаемые в нашем заголовке. С этой настройкой страница результатов будет называть это <script> дважды при загрузке, а также приводит к поломке JS. Итак, после удаления <script> загрузки результатов он прекратил бросать ошибку.

Для краткости, просто убедитесь, что вы не назовите то же самое function дважды на странице результатов, и оно должно очистить Uncaught TypeError.

Не делайте этого. Повторение. Самостоятельно

--ether

1

В моем случае я случайно был the form and script для Google Custom Search дважды повторен на той же странице. Как только вторая партия была удалена, она перестала выдавать ошибку.