Пользовательский поиск Google определяет, когда загружается скрипт

Я использую пользовательский поиск Google в самой простой форме. Я только что добавил сгенерированный скрипт и тег <gcse:search></gcse:search> в представление. Все работает так, как ожидалось, однако я хотел бы иметь возможность самостоятельно установить условие поиска в текстовом поле, а затем запустить отправку. Я не могу понять, как определить, когда скрипт ниже загружен. Есть ли способ изменить сценарий, чтобы я мог использовать функцию jQuery then()?

(function () {
        var cx = 'xxxxxxxxxxxxxxxxxx:xxxxxxxx';
        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 type="text/javascript" src="https://www.google.se/jsapi"></script>

<script type="text/javascript">
    google.load("search", "1", { language: 'sv', style: google.loader.themes.MINIMALIST });
    google.setOnLoadCallback(function () {
        var ctrl = new google.search.CustomSearchControl('xxxxxxxxxxxxxxxxxx:xxxxxxxx');
        ctrl.draw('cse');

        // you can do stuff here, like trigger a search as shown  below !!        

        ctrl.execute('<%=Request.QueryString["text"] %>');
    }, true);
</script>

person Pelle    schedule 02.11.2012    source источник
comment
@Palle Я пытаюсь сделать то же самое. Не могли бы вы объяснить мне, как вы это сделали? После вашего ctrl.draw('cse'), куда вы передаете результаты поиска, чтобы Google знал, что искать?   -  person Erick    schedule 29.01.2016
comment
ctrl.execute() запустит поиск. В этом примере значение из строки запроса содержит условие поиска, но вы можете выполнить команду ctrl.execute('some term');   -  person Pelle    schedule 29.01.2016


Ответы (2)


Я использовал обходной путь для этого. Сценарий от Google создает iframe с атрибутом src, который содержит код &cx= и термин для поиска (&q=):

http://www.google.com/cse?cx=xxxxxxxxxxxx%3Ac8u_ywvcjnw&ie=UTF-8&q=term+to+search&sa=Search&....

Используя jquery, вы можете создать iframe с атрибутом src, установленным как указанная выше ссылка.

person Silvanu    schedule 06.11.2012
comment
@Silvanu Я пытаюсь сделать то же самое, что и вы: я хочу запустить поиск после завершения одного из моих других событий. Как я могу создать iframe с помощью JQuery? - person Erick; 29.01.2016

На случай, если кто-то еще захочет сделать это более простым способом - я просто использовал setInterval для опроса, когда он загружается. поле поиска:

 <gcse:searchresults-only gname='ap_search'></gcse:searchresults-only> 

затем просто добавьте тег скрипта под ним:

javascript:
  var int=setInterval(function() {
    if (typeof google != 'undefined' && google.search.cse) {
      google.search.cse.element.getElement('ap_search').execute("#{@term}")  
      clearInterval(int)
    }
  }, 200)
person Kevin    schedule 13.11.2012