6

私は GCS をウェブサイトに追加する任務を負っています。手順に従って無料の GCS ( http://www.google.com/cse/sitesearch/create ) を作成し、提供されたスニペットを適切な場所に貼り付けた後、検索ボックスとボタンのコンポーネントは正常にレンダリングされ、ユーザーは検索文字列を入力し、検索を実行して結果を確認できます。ここまでは順調ですね。

ただし、コンポーネントが初めてレンダリングされるときに、事前に入力された文字列をボックスに渡して、プログラムで検索をすぐに実行できるようにしたいと考えています。このビットは機能していません。

私が現在用意しているコードは次のとおりです。提供されたスニペットと、Custom Search Element Control API ドキュメント ( https://developers.google.com/custom-search/docs/element ) を読んで得られた追加のコードで構成されています。 )、「即時実行」を実装することを目的としています:

<div class="content-container">  
    <script type="text/javascript"> 
        (function() { 
            var cx = '(my search 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> gname="2DSearch"</gcse:search> 
    <script type="text/javascript"> 
        var element = google.search.cse.element.getElement("2DSearch"); 
        element.prefillQuery(primarySearch); 
        element.execute(primarySearch); 
    </script> 
</div> 

primarySearch は、自動的に検索したい文字列です。コンポーネントがレンダリングされると、文字列 'gname="2DSearch"' が短時間表示され、検索コンポーネントが表示される直前に再び消えます。その後は何も起こりません。

この質問にはいくつかの類似点があるようです (未回答): https://stackoverflow.com/questions/15871911/passing-optional-search-parameters-into-google-custom-search-query

他に関連するものがないか、何時間も Web を検索しましたが無駄でした。

なぜ機能しないのか、および/または何をする必要があるのか​​ 誰にも教えてもらえますか?

申し訳ありませんが、私は多くのプログラミングを行ってきましたが、HTML と JavaScript に関しては事実上読み書きができません。ありがとうジム

Chrome コンソールに次のエラーが表示されていることがわかりました: Uncaught ReferenceError: google is not defined

私のコードは次のようになります。

<div class="content-container">
    <script type="text/javascript">
        (function() {
            var cx = '013736134253840884188:fxsx6zqql_y';
            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>
</div>

<div class="gcse-search" data-gname="2DSearch"></div>

<div class="content-container">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        var element = google.search.cse.element.getElement("2DSearch");
        element.prefillQuery(primarySearch);
        element.execute(primarySearch);
    </script>
</div>

コンソールにも次のように表示されます。

XMLHttpRequest を読み込めません (投稿が許可されていない上記の jsapi リンクをここに挿入してください)。Origin (私のローカルホストの URL をここに挿入) は、Access-Control-Allow-Origin で許可されていません。

ネット全体でこれと同様のエラーへの参照が多数あり、それぞれがわずかに異なり、JSON、JQUERY、AJAX などを参照して提案されたソリューションがありますが、私がやろうとしていることに直接関連するものは何も見つかりませんでした(つまり、「google」が定義されているファイルまたはライブラリをコードで利用できるようにします)、私が試したものは何も機能しませんでした。

ろうそくを持って炭鉱を通り抜けようとすることについて話してください... :) 乾杯

4

3 に答える 3

2

URL 経由で検索語を渡すことができますか?

<script>
  (function() {
    var cx = 'YOURID';
    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:searchbox queryParameterName="term"></gcse:searchbox>
<gcse:searchresults></gcse:searchresults>

検索結果から「検索」ページを呼び出すと、yourdomain.com/search?term=searchwordすぐに表示されます。

于 2016-05-08T13:23:25.697 に答える