1

可能な限り単純な形式で Google カスタム検索を使用しています。<gcse:search></gcse:search>生成されたスクリプトとタグをビューに追加しました。すべてが期待どおりに機能しますが、テキストボックスに検索語を自分で設定して送信をトリガーできるようにしたいと考えています。以下のスクリプトがいつ読み込まれるかを判断する方法がわかりません。then()jQuery関数を使用できるようにスクリプトを変更する方法はありますか?

(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>
4

2 に答える 2

1

他の誰かがこれをもっと簡単な方法でやりたい場合に備えて、私は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)
于 2012-11-13T07:42:42.433 に答える
1

これには回避策を使用しました。Google のスクリプトは、 &cx=コードと検索する用語 ( &q= )を含む src 属性を持つ iframe を作成しています。

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

jquery を使用すると、属性srcが上記のリンクに設定された iframe を作成できます。

于 2012-11-06T10:38:18.427 に答える