2013-07-10 8 views
35

के साथ स्थापित रिमोट डीबगिंग प्राप्त करना मैं बिना भाग्य के, फैंटॉमजेएस के साथ रिमोट डीबगिंग सेट अप करने का प्रयास कर रहा हूं। मैं https://github.com/ariya/phantomjs/wiki/Troubleshooting पर निर्देशों का पालन कर रहा हूं।फ़ैंटॉमजेएस

var system = require('system'), fs = require('fs'), webpage = require('webpage'); 

(function(phantom){ 
    var page=webpage.create(); 

    function debugPage(){ 
     console.log("Refresh a second debugger-port page and open a second webkit inspector for the target page."); 
     console.log("Letting this page continue will then trigger a break in the target page."); 
     debugger; // pause here in first web browser tab for steps 5 & 6 
     page.open(system.args[1]); 
     page.evaluateAsync(function() { 
      debugger; // step 7 will wait here in the second web browser tab 
     }); 
    } 
    debugPage(); 
}(phantom)); 

अब मैं कमांड लाइन से इस चलाएँ::

$ phantomjs --remote-debugger-port=9001 --remote-debugger-autorun=yes debug.js my.xhtml 

console.log संदेश अब खोल विंडो में प्रदर्शित होते मैं एक छोटे से debug.js नामित कार्यक्रम है। मैं एक ब्राउज़र पेज localhost:9001 पर खोलता हूं। यह इस बिंदु पर है कि दस्तावेज कहता है "प्रेत संदर्भ के लिए पहला वेब इंस्पेक्टर प्राप्त करें" हालांकि, मुझे about:blank के लिए केवल एक ही प्रविष्टि दिखाई देती है। जब मैं उस पर क्लिक करता हूं, तो मुझे यूआरएल http://localhost:9001/webkit/inspector/inspector.html?page=1 के साथ, रिक्त पृष्ठ के बारे में अप्रासंगिक के लिए एक इंस्पेक्टर मिलता है। प्रलेखन __run() निष्पादित करने के बारे में वार्तालाप करता है, लेकिन मुझे उस पृष्ठ पर नहीं लग रहा है जहां मैं ऐसा करूँगा; about:html एक __run() contिना लगता है जो एक नो-ऑप है।

एफडब्ल्यूआईडब्ल्यू, मैं W8 के तहत फैंटॉमजेएस 1.9.1 का उपयोग कर रहा हूं।

मुझे क्या याद आ रही है?

+0

मैं उपयोग [इस] (http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples। एचटीएमएल) को स्थानीय पोर्ट को दूरस्थ वेबसर्वर पोर्ट पर अग्रेषित करने के लिए। –

उत्तर

23

प्रलेखन कहते हैं:

To run your script, simply enter the __run() command in the Web Inspector Console.

__run() नो-सेशन लेकिन अपनी स्क्रिप्ट के लिए सिर्फ एक आवरण नहीं है। आपको पहले कंसोल टैब का चयन करना होगा और फिर कमांड विंडो में __run() दर्ज करना होगा। यदि आप क्रोम से परिचित हैं, तो यह डेवलपर्स टूल के समान ही है।

debug console

+3

आप भी कर सकते हैं --remote-debugger-autorun = yes https://github.com/ariya/phantomjs/wiki/Troubleshooting – AlexMA

+2

धन्यवाद के अनुसार! __run() से पहले _double underscore_ को समस्या निवारण दस्तावेज़ पृष्ठ पर आसानी से नहीं देखा जा सकता है ... http://phantomjs.org/troubleshooting.html – JMax

+1

मुझे त्रुटि मिल रही है "Uncaught ReferenceError: __run परिभाषित नहीं किया गया है (...) " – Mardok

21

तो जैसे एक स्क्रिप्ट डिबग करने के लिए, शुरू phantomjs:

phantomjs --remote-debugger-port=9000 hello.js 

यहाँ एक सुपर साधारण परीक्षण स्क्रिप्ट (hello.js) काम करता है। ध्यान दें कि आपको "डीबगर" रखना चाहिए; आपकी स्क्रिप्ट के शीर्ष पर, या अपनी स्क्रिप्ट में जहां भी आप डीबगर में तोड़ना चाहते हैं।

debugger; 

for (var i=0; i < 5; i++) 
{ 
    console.log('debugging in phantom js:' + i); 
} 

phantom.exit(); 

अब बस इस यूआरएल आपके ब्राउज़र में लोड:

http://127.0.0.1:9000/ 

तो फिर तुम उस पर ब्राउज़र पृष्ठ में सूचीबद्ध

about:blank 

क्लिक करें एक लिंक दिखाई देगा, और फिर आप क्रोम इंस्पेक्टर की तरह दिखने वाला एक पूरा पृष्ठ देखेंगे। इस पृष्ठ में मौजूद टूलबार में "कंसोल" बटन पर क्लिक करें (क्रोम या सफारी का कंसोल नहीं जिसका उपयोग आप उपयोग करने के लिए करते हैं)।

अब, उस कंसोल में "__run()" टाइप करें और एंटर दबाएं। आपकी स्क्रिप्ट डिबगिंग प्रदर्शित और शुरू करेगी!

10

मुझे क्रोम संस्करण 57.0.2987.133 (64-बिट) का उपयोग कर मैक पर काम करने के लिए डिबगिंग करने में समस्याएं थीं। मुझे स्थानीयहोस्ट पर खोलने के लिए डीबगर मिला: 9 000 (127.0.0.1:9000 मेरे लिए काम नहीं किया) लेकिन __run() (हाँ, डबल अंडरस्कोर के साथ) दर्ज करने के बाद, कोई प्रतिक्रिया नहीं थी। मैं सूत्रों के तहत अन्य जेएस फाइलों को देख सकता था, मेरा सूचीबद्ध था लेकिन खाली था। (मैंने क्रोम में डिबगिंग सक्षम किया है)

मैंने सफारी पर इसकी कोशिश की और यह सब विज्ञापित के रूप में काम किया।क्रोम के लिए

अद्यतन: (से नीचे थियागो फर्नांडीस): जाहिरा तौर पर इस मुद्दे को क्रोम के कारण होता है स्वीकार नहीं कर कुंजी दर्ज करें, तो वैकल्पिक हल क्रोम कंसोल के अंदर इस समारोह का मूल्यांकन करने, enterKey काम कर पाने के लिए है:

function isEnterKey(event) { return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode === 13; } 
+0

क्रोम पर एक वर्कअराउंड की आवश्यकता है https://github.com/ariya/phantomjs/issues/12864#issuecomment-279612178 –

+0

धन्यवाद थियागो लेकिन क्रोम के पुराने संस्करण को स्थापित करने के अलावा अन्य कामकाज क्या है? इस मामले में मैं सिर्फ सफारी का उपयोग करूंगा। –

+2

वर्कअराउंड क्रोम कंसोल के अंदर इस फ़ंक्शन का मूल्यांकन करना है, इसलिए enterKey काम कर रहा है: '' फ़ंक्शन isEnterKey (ईवेंट) { वापसी (event.keyCode! == 229 && event.keyIdentifier === "Enter") || event.keyCode === 13; } '' –

1

मेरे मामले में __run() कंसोल में निष्पादित नहीं किया जाएगा। यह एक ही मुद्दा आपके पास है, तो पर पढ़ें ....

खुला PowerShell और स्क्रिप्ट को निष्पादित:

cls 
# we go to the folder where our test.js script resides 
cd "C:\Users\xxx\Phantomjs.Console" 
phantomjs --remote-debugger-port=9000 --remote-debugger-autorun=yes test.js 
  1. अपने Chrome ब्राउज़र खोलें और
  2. http://localhost:9000
  3. करने के लिए जाना
  4. मेरे मामले test.js फ़ाइल में, अपने पर क्लिक करें।
  5. स्रोत टैब पर स्विच करें!
  6. देखें अभिव्यक्ति के तहत __run() निष्पादित करें!

डीबगिंग के लिए अपनी स्क्रिप्ट में debugger कथन दें!

enter image description here

संबंधित मुद्दे