2012-04-16 9 views
5

Estoy abriendo cualquier página en el dominio de Amazon.com (por ejemplo, "http://www.amazon.com") y luego intento inyectar JQuery como esto:Inyectar JQuery en páginas de Amazon.com utilizando PhantomJS causa problemas con JQuery

var injected = page.injectJs('jquery-1.7.1.js'); 
console.log("jquery was injected successfully: " + injected); 

este código imprimirá true a la consola. Sin embargo, tratar de acceder a $(document) desde dentro page.evaluate() así:

page.onLoadFinished = function (status) { 
    var results = page.evaluate(function() { 
     $(document);  
    }); 

phantom.exit(); 
}; 

imprimirá TypeError: 'undefined' is not a function a la consola.

Este código funciona con la mayoría de los otros dominios que he probado. Noté que Amazon parece tener su propia versión de JQuery que carga y me pregunto si podría estar en conflicto con la versión de JQuery que estoy cargando de alguna manera. ¿Algunas ideas?

+0

Por favor, marque preguntas como esta como javascript también (la próxima vez). –

+0

¿Qué sucede cuando usa el alias no? 'jQuery (documento)' por ejemplo. – Tejs

+0

Funciona (¡gracias!). Pero no entiendo por qué. ¿Alguien sabe? – grumblebeans

Respuesta

3

Usted sólo tiene que poner en el modo de jQuery noConflict con un nombre de variable alternativa de este modo:

var results = page.evaluate(function() { 
    $jq = window.jQuery; 
    $jq.noConflict(); 

    console.log("Title: " + $jq('title').text()); 
}); 

trabajado para mí! ¡Espero que funcione para ti! :)

+0

oh, sí, ¡funciona! –

Cuestiones relacionadas