我認爲window.onerror
在WebKit中無法正常工作(https://bugs.webkit.org/show_bug.cgi?id=8519)。不知道這是否已經修復,如果是這樣,如果QT WebKit版本已經是最新的。
但是,您應該能夠捕獲代碼中拋出的異常。如果您使用類似webPage.evaluate(...)
的代碼來運行代碼,則無法將完整的調用包裝在try/catch塊中,因爲腳本是在不同的上下文中評估的,並且這些錯誤不會出現在主執行上下文中。相反,您需要捕獲頁面執行上下文中的錯誤。不幸的是,沒有辦法訪問在主要上下文中定義的任何函數,因此我們必須明確地編寫代碼周圍的包裝代碼來執行。
以下是PhantomJS源中包含的phantomwebintro.js
文件的修改示例。它加載一個HTML頁面,插入一個腳本,然後在頁面上下文中運行一些代碼(這裏有一行引發類型錯誤)。該代碼被try/catch塊封裝,並將包裝結果或錯誤對象返回到主要上下文。
...
// Load an HTML page:
page.open("http://www.phantomjs.org", function(status) {
if (status == "success") {
// Inject some scripts:
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
// Run your own code in the loaded page context:
var resultWrapper = page.evaluate(function() {
var wrapper = {};
try {
// Your code goes here
// ...
var x = undefined.x; // force an error
// store your return values in the wrapper
wrapper.result = 42;
} catch(error) {
wrapper.error = error;
}
return wrapper;
});
// Handle the result and possible errors:
if (resultWrapper.error) {
var error = resultWrapper.error;
console.log("An error occurred: " + error.message);
// continue handling the error
// ...
} else {
var result = resultWrapper.result;
// continue using the returned result
// ...
}
...
});
}
});
...
我想你的意思是定義一個'window.onerror'函數,對吧? –
是的,固定的。謝謝! –