2012-04-16 5 views
5

Ich öffne jede Seite in der Amazon.com-Domäne (zum Beispiel "http://www.amazon.com") und versuche dann, JQuery wie zu injizieren dies:Das Einfügen von JQuery in Amazon.com-Seiten mit PhantomJS verursacht Probleme mit JQuery

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

Dieser Code wird true an die Konsole drucken. Allerdings versucht $(document) zuzugreifen aus page.evaluate() wie folgt aus:

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

phantom.exit(); 
}; 

TypeError: 'undefined' is not a function auf der Konsole gedruckt wird.

Dieser Code funktioniert mit den meisten anderen Domänen, mit denen ich versucht habe. Ich habe bemerkt, dass Amazon eine eigene Version von JQuery zu haben scheint, die geladen wird, und ich frage mich, ob es möglicherweise einen Konflikt mit der JQuery-Version gibt, die ich irgendwie lade. Irgendwelche Ideen?

+0

Bitte markieren Sie Fragen wie dieses auch als Javascript (nächstes Mal). –

+0

Was passiert, wenn Sie den Nicht-Alias ​​verwenden? 'jQuery (Dokument)' zum Beispiel. – Tejs

+0

Es funktioniert (danke!). Aber ich verstehe nicht warum. Weiß jemand? – grumblebeans

Antwort

3

Sie müssen nur jQuery in noConflict Modus mit einem alternativen Variablennamen setzen wie so:

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

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

für mich gearbeitet! Hoffe es funktioniert für dich! :)

+0

oh, ja, es funktioniert! –