2013-03-08 34 views
11

Tôi đăng ở đây sau nhiều giờ tìm kiếm không có kết quả. PhantomJS không cho phép tôi sử dụng biến như trong mã bên dưới, với thông báo lỗi khi chạy tập lệnh "Không thể tìm thấy biến".Không thể tìm thấy biến - PhantomJS

Bạn có bất kỳ ý tưởng nào có thể là vấn đề của tôi không?

page.open(myurl, function (status) { 

    if (status == 'success') { 

     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() { 

      elem = page.evaluate(function() { 

       /* Select one element with jQuery */ 
       myElem = $('body'); 
       return myElem; 

      }) 

      var elemHtml = page.evaluate(function() { return $(elem).html(); }); 
      console.log(elemHtml); 

     }) 

     phantom.exit();  

    } 

}) 

Cảm ơn =)

+0

'myElem' được định nghĩa ở đâu? –

+0

Tôi đã cập nhật mã của mình để hiển thị cho bạn nơi myElem được xác định :) – Antoine

Trả lời

19

Có một phần quan trọng của thông tin trong Quick Start hướng dẫn (trong phần Mã đánh giá của nó):

Để đánh giá JavaScript hoặc CoffeeScript mã trong bối cảnh của trang web, sử dụng hàm eval(). Việc thực hiện là "sandboxed", không có cách nào để mã truy cập bất kỳ đối tượng JavaScript và biến nào bên ngoài ngữ cảnh trang của riêng nó. Một đối tượng có thể được trả về từ đánh giá(), tuy nhiên nó được giới hạn trong các đối tượng đơn giản và không thể chứa các hàm hoặc các bao đóng.

Vấn đề với mã của bạn là như vậy, gồm hai phần:

  1. Biến elem được khởi tạo bên ngoài bối cảnh trang web, nó không thể truy cập từ thứ hai evaluate.
  2. Bạn trả về một đối tượng không đơn giản, tức là một phần tử DOM.

Đây là vấn đề dễ giải quyết, chủ yếu bằng cách thiết kế đúng mã để phù hợp với mô hình thực thi "bị bỏ tù" thực tế. Vui lòng đọc kỹ tất cả các tài liệu liên quan và khám phá tấn số included examples.

+2

công việc tuyệt vời! funny bạn đã có câu trả lời duy nhất và họ của bạn sẽ xảy ra có nghĩa là "Hướng dẫn" – pythonian29033

+1

Tôi vẫn không chắc chắn làm thế nào để đạt được nó. Tôi có một trường hợp để truy cập biến trong page.evaluate(). Tôi muốn tìm phần tử DOM dựa trên chuỗi được chuyển đến đánh giá(). Bạn có thể vui lòng chỉ cho tôi/chỉ cho tôi mã không? – rohit12sh

+1

"Hãy đọc kỹ mọi tài liệu liên quan (...)" - huh? ví dụ. "Tôi sẽ không nói với bạn..." –

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