2015-06-23 26 views
1

我想知道爲什麼下面的代碼沒有采用通過使用evaluate()方法執行的javascript代碼在控制檯中輸出錯誤輸出。在CasperJS/PhantomJS中捕獲由evaluate()引起的錯誤?

casper.on 'resource.error', -> 
    @echo 'Resource error: ' + "Error code: "+resourceError.errorCode+" ErrorString: "+resourceError.errorString+" url: "+resourceError.url+" id: "+resourceError.id, "ERROR" 

由於evaluate()在web瀏覽器的上下文中執行代碼,不應該由上面的代碼捕獲由它引起的任何錯誤嗎?

+0

嗯,我不確定究竟是什麼「資源」的含義。 :/服務器發送和回送資源以及頁面瀏覽器上發生的事情?如果是這樣的話,有沒有辦法在casperjs中捕獲page.error? – tetutato

回答

4

documentation to 'resource.error'說,這一切:

時所要求的任何資源無法正確加載觸發。接收resourceError對象具有以下屬性

它無關的頁面錯誤。實際上,casper.evaluate()和PhantomJS等效的page.evaluate()不會向該頁發送請求以與其交互。它全部被烘烤成相同的引擎。唯一的限制是evaluate()被沙箱化。它無法訪問外部定義的變量,因此您必須明確地將它們傳入和傳出。

你想要什麼"page.error" event

當檢索到的頁面留下一個JavaScript錯誤未捕獲


就拿下面的完整腳本所:

var casper = require('casper').create(); 

casper.on("remote.message", function(msg) { 
    this.echo("Console: " + msg); 
}); 

casper.on("page.error", function(msg, trace) { 
    this.echo("Error: " + msg); 
}); 

casper.on("resource.error", function(msg, trace) { 
    this.echo("Res.Error: " + msg); 
}); 

casper.start("http://example.com",function(){ 
    this.evaluate(function(){ 
     null.pop(); 
    }); 
}); 

casper.run(); 

它輸出:

 
Error: TypeError: null is not an object (evaluating 'null.pop') 
+0

如果我想拋出一個錯誤,我該怎麼做?我試過 拋出新的錯誤(味精)並拋出新的CasperError(味精),但他們似乎沒有做任何事情。 – tetutato

+0

適合我。 –

+0

奇怪。回聲工作正常,但當我拋出一個錯誤,我什麼都看不到在控制檯日誌。拋出一個錯誤退出casper吧? – tetutato