2012-06-25 12 views
26

Soy totalmente nuevo en Greasemonkey, javascript, de hecho, todo lo de la interfaz de usuario.Ejecute el script de Greasemonkey en la misma página, varias veces?

Requisito: Userscripts es ejecutado por GS una vez que se carga la página. Sin embargo, necesito que el mismo script se ejecute varias veces sin actualizar

Caso de uso: por ejemplo, la búsqueda de Amazon.com se realiza con Ajax. Necesito insertar un elemento personalizado en los resultados de búsqueda.

necesito para inyectar mi contenido al-resultados-div junto con los resultados cada vez que una búsqueda que sucede en la misma página (no hay actualización de la página)

Mi script actual se queda sólo con la actualización de la página.

Espero que la explicación anterior sea clara. Por favor ayuda.

Respuesta

37

La manera más simple y más robusta es usar the waitForKeyElements() utility.

Aquí es una guión completo que utiliza jQuery y waitForKeyElements para alterar los resultados de búsqueda de Amazon:

// ==UserScript== 
// @name  _Amazon Search, alter results 
// @include http://www.amazon.com/s/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

function addCustomSearchResult (jNode) { 
    //***** YOUR CODE HERE ***** 
    jNode.prepend (
     '<div id="result_000" class="fstRow">Buy my stuff, instead!</div>' 
    ); 
} 

waitForKeyElements ("#atfResults", addCustomSearchResult); 
+2

¡¡¡Muchísimas gracias !!!!! Aunque tengo algo de experiencia en programación, esta secuencia de comandos de interfaz de usuario es un poco molesto (molesto) para mí. Tu código funciona exactamente como yo quería. Lo personalizaría para cumplir otros requisitos. Muchas gracias de nuevo. – Firefox

+0

De nada; ¡encantado de ayudar! –

4

Usted puede utilizar el evento DOMNodeInserted para llamar a su devolución de llamada, por ejemplo:

document.addEventListener('DOMNodeInserted', function() { alert('hi') }, false); 

Tenga en cuenta que el evento se dispara por cualquier cambio en la estructura de la página, por lo que tendrá que comprobar que eres enfocándose en el cambio correcto.

+0

Muchas gracias, voy a comprobarlo. ¿Es posible seguir el evento 'clic' relacionado con el botón de búsqueda? – Firefox

+1

Los eventos de mutación son obsoletos, tienen errores y no son fáciles de usar en la práctica. ... Puede rastrear el evento click, pero los cambios reales de la página pasarán un intervalo aleatorio (hasta varios segundos) después de eso. –

+0

No sabía que estaba en desuso, gracias. – ncreep

Cuestiones relacionadas