2013-01-24 63 views
4

phantomjs文檔他們說以下內容:phantomjs - page.onError - trace始終是一個空對象?

錯誤處理 要輕鬆捕獲錯誤在網頁中發生,無論是語法錯誤或其他拋出的異常,對於onError的處理程序WebPage對象已被添加。這樣的處理程序的一個例子是:

page.onError = function (msg, trace) { 
    console.log(msg); 
    trace.forEach(function(item) { 
     console.log(' ', item.file, ':', item.line); 
    }) 
} 

現在如果網頁打開一些JavaScript異常站點,詳細信息(包括堆棧跟蹤)將被打印出來。

好了,我已經創建了一些「破」的網頁(其中的JavaScript導致異常頁),我得到 獲取引發錯誤,但沒有在跟蹤

有人能幫忙嗎?

這裏是我的情況的一個例子:

HTML:

<!docType> 
<html><head></head> 
<body> 
<script src='broken.js'></script> 
</body> 
</html> 

腳本:broken.js

1. // this script is broken at line 5. 
2. // 
3. var i=20; 
4. 
5. i = somethingThatDontExist 
6. 
7. // we will never be here... 
8. 
+1

你能介紹一個可重現的測試用例嗎? –

+1

@AriyaHidayat是的,當然。我已添加到我的查詢中。非常感謝您的加入。 – Zo72

+0

@ Zo72您是否檢查了我的答案? –

回答

0

你可能錯過了一些東西在您的測試設置,但一切正常精細。你可能忘了PhantomJS調用是異步的。

這裏是我的測試設置:

的test.html

<!docType> 
<html><head></head> 
    <body> 
    <script src='broken.js'></script> 
    </body> 
</html> 

broken.js

var i = 20; 
i = somethingThatDontExist; 

testError.js

var page = require('webpage').create(); 
page.onError = function (msg, trace) { 
    console.log(msg); 
    trace.forEach(function(item) { 
    console.log(' ', item.file, ':', item.line); 
    }) 
} 
page.open('test.html',function(){phantom.exit()}); 
0

這是一個老問題,但仍然是一個問題(我最近遇到這個問題)。 OP可能使用的是舊版本。

有幾件事情來檢查......

1)console.log的API已經phantomjs 2.1.1和2.5.0之間的變化。在2.5.0中console.log只打印第一個參數(在2.1.1中它將打印所有)。

爲了安全起見,先嚐試構建一個字符串並將其記錄爲單個參數,以確保這不僅僅是一個日誌記錄問題。即console.log(concatenatedString)而不是console.log(var1, var2, var3,...)

如果要連接對象和數組,請使用JSON.stringify(object)

2)根據我的經驗,phantomjs關於如何捕獲頁面上下文中的錯誤是不一致的。

舉例來說,如果(在頁面)一個javascript catchblock做了console.log('message', error),該phantomjs page.onConsoleMessage回調將得到的消息和字符串「的翻譯:」這樣的字符串...所以任何有關錯誤數據包含在頁面上下文和phantomjs之間丟失該對象。

console.error可能有不同的行爲比console.log,但我沒有測試它。)

3)page.onError在此刻phantomjs 2.5.0被打破。它永遠不會被調用,相反,錯誤出現在page.onConsoleMessage中,但會錯過錯誤對象(請參閱#2)。

現在使用phantomjs 2.1.1如果您確實需要知道頁面上是否有javascript錯誤。

請參閱下面的錯誤代碼來說明當涉及到page.onError,page.onResourceErrorpage.onConsoleMessage時,2.1.1和2.5.0之間的區別。

https://github.com/ariya/phantomjs/issues/14776

相關問題