Más ejemplos de devoluciones de llamada de elementos de búsqueda

Esta página ofrece una variedad de ejemplos de cómo usar las devoluciones de llamada de elementos de búsqueda. Complementan los ejemplos que se encuentran en la sección Devoluciones de llamada del documento de la API de Custom Search Element.

Cómo buscar ejemplos de devolución de llamada de inicio

La devolución de llamada de inicio de la búsqueda puede modificar la consulta antes de que se use para la búsqueda. El Motor de Búsqueda Programable se puede configurar para que incluya términos predeterminados en la consulta, pero esta devolución de llamada puede modificar la consulta en función de cualquier información disponible para la función de devolución de llamada.

La siguiente devolución de llamada de inicio de la búsqueda decora cada consulta con el día de la semana actual.

Ejemplo de devolución de llamada de inicio de búsqueda
<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:g9ckaktfipe"></script>
const mySearchStartingCallback = (gname, query) => {
  const dayOfWeek = new Date().getDay();
  console.log(dayOfWeek);
  var days = {
        "0": "Sunday",
        "1": "Monday",
        "2": "Tuesday",
        "3": "Wednesday",
        "4": "Thursday",
        "5": "Friday",
        "6": "Saturday"
    };

    return query + ' ' + days[dayOfWeek];
};
// Install the callback.
window.__gcse || (window.__gcse = {});
  window.__gcse.searchCallbacks = {
    image: {
      starting: mySearchStartingCallback,
    },
    web: {
      starting: mySearchStartingCallback,
    },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

Ejemplos de devoluciones de llamada renderizadas de resultados

La devolución de llamada renderizada de resultados es útil para modificar la página después de que se completa con resultados. Está diseñada para facilitar la modificación de la visualización de resultados sin que la devolución de llamada asuma toda la responsabilidad de renderizar los resultados.

En los siguientes ejemplos, se ilustran dos aplicaciones de la devolución de llamada renderizada de resultados que no funcionan en los resultados.

Cómo identificar la última página de resultados

Esta devolución de llamada de resultados renderizados detecta que se muestra la última página de resultados y aparece una alerta que le recuerda al usuario que llegó al final.

<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
    var searchresults= document.getElementsByClassName("gsc-cursor-page");
    var index= document.getElementsByClassName("gsc-cursor-current-page");
    if(index.item(0).innerHTML == searchresults.length){
       alert("This is the last results page");
    }
};

Cómo instalar la devolución de llamada

window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
      // Since the callback is in the global namespace, we can refer to it by name,
      // 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
      rendered: myWebResultsRenderedCallback,
  },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Aumentar el tamaño de la fuente de los vínculos de "cursor"

Esta demostración de devolución de llamada Resultados renderizados aumenta el tamaño de fuente de los números de "cursor" que seleccionan páginas de resultados.

El tamaño de fuente predeterminado es de 12 px. Aquí, aumentamos a 20 px.

<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
   document.getElementsByClassName("gsc-cursor")[0].style.fontSize = '20px';
};

Cómo instalar la devolución de llamada

window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
      // Since the callback is in the global namespace, we can refer to it by name,
      // 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
      rendered: myWebResultsRenderedCallback,
  },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
Usa letras para las etiquetas de "Cursor"

Esta devolución de llamada representado de los resultados cambia los vínculos de la página en el "cursor" de números a letras.

<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
    var arr = document.getElementsByClassName('gsc-cursor-page');
    var alp = ['A','B','C','D','E','F','G','H','I','J','K','L',
      'M','N','O','p','Q','R','S','T','U','V','W','X','Y','Z'];
    for (var i = 0; i < arr.length; i++) {
        arr[i].innerHTML = alp[i];
    }
};

Cómo instalar la devolución de llamada

window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
      // Since the callback is in the global namespace, we can refer to it by name,
      // 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
      rendered: myWebResultsRenderedCallback,
  },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

Ejemplos de devolución de llamada de resultados listos

Cómo mostrar los resultados con fondos de colores alternativos

Esta devolución de llamada da formato a los resultados con fondos claros y oscuros alternativos.

<script async
      src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>

Nota: Este código está escrito en JavaScript/ES6. Se ejecutará en la mayoría de los navegadores, pero deberá convertirse a JavaScript/ES5 para Internet Explorer y en algunos otros navegadores anteriores.

barredResultsRenderedCallback = function(gname, query, promoElts, resultElts){
  const colors = ['Gainsboro', 'FloralWhite'];
  let colorSelector = 0;
  for (const result of resultElts) {
    result.style.backgroundColor = colors[colorSelector];
    colorSelector = (colorSelector + 1) % colors.length;
  }
};
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
    rendered: barredResultsRenderedCallback,
  },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

Nube de palabras

La aplicación obvia de la devolución de llamada Resultados listos es mostrar los resultados de la búsqueda en un formato difícil de alcanzar mediante la devolución de llamada Resultados renderizados para ajustar el HTML. La devolución de llamada Resultados listos comienza con un div vacío. En un ejemplo del documento API de Search Element, se mostró cómo usar la devolución de llamada para renderizar una versión muy simple de los resultados. En otro ejemplo, se mostró cómo conservar los datos de la devolución de llamada Resultados listos y pasarlos a la devolución de llamada Resultados renderizados, donde se pueden usar para decorar la pantalla de resultados estándar.

La siguiente devolución de llamada Resultados listos muestra que los resultados de la búsqueda no tienen que ser una lista de resultados. Reemplaza la visualización normal de los resultados de la búsqueda por una nube de palabras de las palabras encontradas en los títulos y el contenido de los resultados. Cuando la lista de resultados es solo un paso intermedio para tu usuario, una devolución de llamada como esta puede omitir esa etapa y usar los resultados para presentar el informe que el usuario desea.

Crea una nube de palabras a partir del contenido de los resultados de la búsqueda
<script async
      src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
<style>
  #container {
    width: 100%;
    height: 4.5in;
    margin: 0;
    padding: 0;
  }
</style>
<script src="https://cdn.anychart.com/releases/v8/js/anychart-base.min.js"></script>
<script src="https://cdn.anychart.com/releases/v8/js/anychart-tag-cloud.min.js"></script>

Nota: Este código está escrito en JavaScript/ES6. Se ejecutará en la mayoría de los navegadores, pero tendrás que convertirlo a JavaScript/ES5 para Internet Explorer y algunos otros navegadores anteriores.

const resultsReadyWordCloudCallback = function(
        name, q, promos, results, resultsDiv) {
    const stopWords = new Set()
      .add('a')
      .add('A')
      .add('an')
      .add('An')
      .add('and')
      .add('And')
      .add('the')
      .add('The');

    const words = {};
    const splitter = /["“”,\?\s\.\[\]\{\};:\-\(\)\/!@#\$%\^&*=\+\*]+/;
    if (results) {
        for (const {contentNoFormatting, titleNoFormatting} of results) {
            const wordArray = (contentNoFormatting + ' ' + titleNoFormatting)
              .split(splitter)
              .map(w => w.toLowerCase());
            for (const w of wordArray) {
                if (w && !stopWords.has(w)) {
                    words[w] = (words[w] + 1) || 1;
                }
            }
        }
    }
    const dataForChart = [];
    for (const key in words) {
        const val = words[key];
        dataForChart.push({
            'x': key,
            'value': val,
        });
    }

    const container = document.createElement('div');
    resultsDiv.appendChild(container);
    container.id = 'container';
    // create a tag (word) cloud chart
    const chart = anychart.tagCloud(dataForChart);
    // set a chart title
    chart.title(`Words for query: "${q}"`)
    // set an array of angles at which the words will be laid out
    chart.angles([0, 45, 90, 135])
    // display the word cloud chart
    chart.container(container);
    chart.draw();
    return true; // Don't display normal search results.
};
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
    web: {
        ready: resultsReadyWordCloudCallback,
    },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

Ejemplo de devolución de llamada de dos partes

Las devoluciones de llamada Resultados listos y Resultados renderizados se pueden usar en combinación para pasar información de la primera a la segunda. Por ejemplo, la información en el arreglo de objetos de resultado está disponible para la devolución de llamada Resultados listos, pero no para la devolución de llamada Resultados renderizados. Si guardamos esa información en un array como parte de la devolución de llamada Resultados listos, podemos hacer que sea accesible para la devolución de llamada resultados renderizados.

Un ejemplo de esto es omitir el panel de vista previa que se muestra cuando se hace clic en un resultado de imagen. Con una devolución de llamada de dos partes, podemos hacer que los resultados de la imagen vinculen directamente a los sitios web correspondientes en lugar de mostrar una vista previa de la imagen cuando se hace clic en él.

Omitir vistas previas de imágenes
<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:g9ckaktfipe"></script>
const makeTwoPartCallback = () => {
  let urls;
  const readyCallback = (name, q, promos, results, resultsDiv) => {
    urls = [];
    for (const result of results) {
      urls.push(result['contextUrl']);
    }
  };
  const renderedCallback = (name, q, promos, results) => {
    const removeEventListeners = element => {
      const clone = element.cloneNode(true);
      element.parentNode.replaceChild(clone, element);
      return clone;
    };
    for (let i = 0; i < results.length; ++i) {
      const element = removeEventListeners(results[i]);
      element.addEventListener('click', () => window.location.href = urls[i]);
    }
  };
  return {readyCallback, renderedCallback};
};
const {
  readyCallback: imageResultsReadyCallback,
  renderedCallback: imageResultsRenderedCallback,
} = makeTwoPartCallback();
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  image: {
    ready: imageResultsReadyCallback,
    rendered: imageResultsRenderedCallback,
  },
};

Incluye estos elementos en el archivo HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>