在 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 之后不会重置,这对我来说很好。