在 document.onload 之前触发 webViewDidFinishLoad
fire webViewDidFinishLoad before document.onload
在执行任何其他脚本之前,我需要在我的 UIWebView 中加载的网页上注入一些 js 代码。不幸的是,似乎 HTML document.onload
在 objective-c webViewDidFinishLoad
回调之前执行。
查看此测试代码:
- (void)viewDidLoad {
[super viewDidLoad];
webView.delegate = self;
[webView loadHTMLString:@"<body onload=\"alert('this is from html')\"></body>" baseURL:nil];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"alert('this is from obj-c')"];
}
消息 "this is from html" 始终显示在消息 "this is from obj-c" 之前。
考虑到我无法控制我的 html 页面,我需要采取另一种方式,所以我必须假设有一个 document.onload
函数被调用。
...确定找到...
我需要使用 webViewDidStartLoad
而不是 webViewDidFinishLoad
。
令我惊讶的是,在 webViewDidStartLoad
回调期间注入的 jscode 可用于加载的 HTML 页面。这对我来说意味着 UIWebView javascript 引擎在 webViewDidStartLoad
之后不会重置,这对我来说很好。
在执行任何其他脚本之前,我需要在我的 UIWebView 中加载的网页上注入一些 js 代码。不幸的是,似乎 HTML document.onload
在 objective-c webViewDidFinishLoad
回调之前执行。
查看此测试代码:
- (void)viewDidLoad {
[super viewDidLoad];
webView.delegate = self;
[webView loadHTMLString:@"<body onload=\"alert('this is from html')\"></body>" baseURL:nil];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"alert('this is from obj-c')"];
}
消息 "this is from html" 始终显示在消息 "this is from obj-c" 之前。
考虑到我无法控制我的 html 页面,我需要采取另一种方式,所以我必须假设有一个 document.onload
函数被调用。
...确定找到...
我需要使用 webViewDidStartLoad
而不是 webViewDidFinishLoad
。
令我惊讶的是,在 webViewDidStartLoad
回调期间注入的 jscode 可用于加载的 HTML 页面。这对我来说意味着 UIWebView javascript 引擎在 webViewDidStartLoad
之后不会重置,这对我来说很好。