2012-04-16 25 views
5

Tôi đang mở bất kỳ trang nào trong miền Amazon.com (ví dụ "http://www.amazon.com") và sau đó cố gắng tiêm JQuery như này:Tiêm JQuery vào các trang Amazon.com bằng PhantomJS gây ra sự cố với JQuery

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

Mã này sẽ in true vào bảng điều khiển. Tuy nhiên, cố gắng truy cập $(document) từ bên trong page.evaluate() như thế này:

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

phantom.exit(); 
}; 

Sẽ in TypeError: 'undefined' is not a function ra cửa sổ Console.

Mã này hoạt động với hầu hết các miền khác mà tôi đã thử. Tôi nhận thấy rằng Amazon dường như có phiên bản riêng của JQuery mà nó tải và tôi tự hỏi nếu nó có thể mâu thuẫn với phiên bản JQuery tôi đang tải bằng cách nào đó. Bất kỳ ý tưởng?

+0

Hãy gắn thẻ các câu hỏi như thế này dưới dạng javascript (lần tiếp theo). –

+0

Điều gì sẽ xảy ra khi bạn sử dụng bí danh không? Ví dụ: 'jQuery (tài liệu) '. – Tejs

+0

Nó hoạt động (cảm ơn!). Nhưng tôi không hiểu tại sao. Có ai biết không? – grumblebeans

Trả lời

3

Bạn chỉ cần đặt jQuery trong chế độ noConflict với một tên biến thay thế như vậy:

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

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

Làm việc cho tôi! Hi vọng nó sẽ giúp ích cho bạn! :)

+0

Ồ, vâng, nó hoạt động! –

Các vấn đề liên quan