window.onerror
WebKit (https://bugs.webkit.org/show_bug.cgi?id=8519) で正しく動作しないという問題があったと思います。これがまったく修正されているかどうかはわかりません。修正されている場合、QT WebKit のバージョンが既に最新であるかどうかはわかりません。
ただし、コードでスローされた例外をキャッチできる必要があります。のようなものを使用しwebPage.evaluate(...)
てコードを実行している場合、スクリプトが別のコンテキストで評価され、エラーがメインの実行コンテキストに表示されないため、完全な呼び出しを try/catch ブロックでラップすることはできません。代わりに、ページ実行コンテキストでエラーをキャッチする必要があります。残念ながら、メイン コンテキストで定義された関数にアクセスする方法はありません。そのため、実行するコードをラップするコードを明示的に記述する必要があります。
以下はphantomwebintro.js
、PhantomJS ソースに含まれるファイルの変更例です。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
// ...
}
...
});
}
});
...