Система пользовательского поиска не работает на телефоне Android

Я запускаю пользовательский поиск Google в браузере, он отлично работает. Он отлично работает даже в эмуляторе в Phonegap, но выдает сетевую ошибку или показывает пустой экран, когда то же самое запускается на телефоне Android. или выдает эту ошибку "файл:///google.com/cse?q=.... не найден".

Я использую код Google Custom Search v2.


person Pritpal Singh    schedule 31.10.2013    source источник
comment
Какой браузер вы используете?   -  person Devnook    schedule 02.11.2013
comment
я запускаю телефонную связь.. она должна работать во всех браузерах... это проблема телефонной связи?   -  person Pritpal Singh    schedule 04.11.2013
comment
Это потому, что при использовании с PhoneGap местоположением вашего источника является файл. Поэтому файл является протоколом, но для доступа к сервису требуется http(s).   -  person Mario    schedule 04.11.2013
comment
тогда какое может быть решение для этого?   -  person Pritpal Singh    schedule 05.11.2013


Ответы (2)


Код, который вы получаете для версии 2 пользовательского поиска, выглядит примерно так:

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

Что он примерно делает, так это создает такой тег:

<script type="text/javascript" src="http://www.google.com/cse/cse.js?cx=ENGINE_ID">

и вставляет его перед другими скриптами на вашей странице. Таким образом, вы можете вообще пропустить этот код и вручную вставить вышеуказанный тег (с идентификатором вашего движка) и только <gcse:search></gcse:search> в свой HTML. Если соединение с file:// по http:// по-прежнему невозможно, загрузите этот скрипт (http://www.google.com/cse/cse.js?cx=ENGINE_ID) и использовать его как локальный файл JavaScript.

person Devnook    schedule 06.11.2013
comment
попробовал, выдает ошибку Невозможно вызвать метод «выполнить» для null в файле filename.html?q=query.. - person Pritpal Singh; 07.11.2013
comment
Мой код js: ‹head› ‹meta http-equiv=Content-Type content=text/html; charset=UTF-8 /› ‹script› var parameters = location.search.substring(1).split(&); var temp = параметры[0].split(=); var запрос = unescape (temp [1]); var myCallback = function() { google.search.cse.element.render( {div:'test', tag:'searchresults-only' }); google.search.cse.element.getElement('q').execute(запрос); }; window.__gcse = { parsetags: 'explicit', callback: myCallback }; ‹/script› ‹script type=text/javascript src=google .com/cse/cse.js?cx=id›‹/script› ‹/head› - person Pritpal Singh; 07.11.2013
comment
мой html: ‹body› ‹div class=gcse-searchbox id=test› ‹!--‹gcse:searchresults-only gname=q autoSearchOnLoad=true›‹/gcse:searchresults-only›--› ‹/div› ‹ /тело› ‹/html› - person Pritpal Singh; 07.11.2013

Я столкнулся с той же проблемой. Однострочное изменение в JavaScript устранило ошибку file://:

// This line must take place before initializing GCSE
window.IS_GOOGLE_AFS_IFRAME_ = true;

Проверено в средах Cordova для iOS и Android.

person audreyt    schedule 28.01.2014
comment
Альтернативное исправление в Java: @Override public void onReceivedError(final int errorCode, final String description, final String failingUrl) { return; } - person audreyt; 28.01.2014