2012-04-16 7 views
5

Sto aprendo qualsiasi pagina nel dominio Amazon.com (ad esempio "http://www.amazon.com") e poi sto tentando di iniettare JQuery come questo:Iniettare JQuery nelle pagine di Amazon.com utilizzando PhantomJS causa problemi con JQuery

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

questo codice stamperà true alla console. Tuttavia, il tentativo di accedere $(document) dall'interno page.evaluate() come questo:

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

phantom.exit(); 
}; 

stamperà TypeError: 'undefined' is not a function alla console.

Questo codice funziona con la maggior parte degli altri domini con cui ho provato. Ho notato che Amazon sembra avere la sua versione di JQuery che carica e mi chiedo se potrebbe essere in conflitto con la versione di JQuery che sto caricando in qualche modo. Qualche idea?

+0

Si prega di taggare domande come questo come javascript pure (la prossima volta). –

+0

Cosa succede quando si utilizza il non alias? 'jQuery (document)' per esempio. – Tejs

+0

Funziona (grazie!). Ma non capisco perché. Qualcuno sa? – grumblebeans

risposta

3

Hai solo bisogno di mettere jQuery in modalità noConflict con un nome di variabile alternativo in questo modo:

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

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

lavorato per me! Spero che funzioni per te! :)

+0

oh, sì, funziona! –

Problemi correlati