我试图让window.onerror随时通知我的视图控制器。我正在设置有关Web视图的JSContext的块回调,它确实执行,但这仅适用于Web视图中的初始页面加载。刷新页面时,错误不再出现在控制器上。有什么想法吗?
JSContext *ctx = [resultWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
ctx[@"window"][@"onerror"] = ^(JSValue *message, JSValue *file, JSValue *line) {
NSLog(@"%@", message);
};
答案 0 :(得分:1)
页面刷新导致JSContext被替换。
您需要为帧加载实现委托,并将 window.onerror 处理程序放在 -webView的选择器实现中:didCreateJavaScriptContext:forFrame:
@implementation MyFrameLoadDelegate
- (void)webView:(WebView *)webView didCreateJavaScriptContext:(JSContext *)context forFrame:(WebFrame *)frame
{
context[@"window"][@"onerror"] = ^(JSValue *message, JSValue *file, JSValue *line) {
NSLog(@"%@", message);
};
}
@end
有关JavaScriptCore.framework最近推出的新功能的精彩介绍,请查看Apple开发者网络上的2013 WWDC简介“将JavaScript集成到本机应用程序”会话:https://developer.apple.com/videos/wwdc/2013/?id=615
它在WebView上有一个简短的部分。