我的问题是 UIWebView 在呈现其内容之前触发 webViewDidFinishLoad,因此在我显示 View 之后,在显示 View 内容之前会有短暂的延迟。是否可以在 DOM 完全呈现时触发事件?
最佳答案
是的,为此使用 JavaScript。在您的 HTML 页面中添加一个 window.onload JavaScript 处理程序,然后当它触发时您可以执行以下两项操作之一:
通过加载虚假 URL 并使用 webview 委托(delegate)拦截它来调用应用程序。例如
//in your web page, in javascript window.onload = function() { document.location.href = 'http://madeupdomain.com/loaded'}; //webview delegate in cocoa - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *URL = [request URL]; NSString *host = URL.host; if ([host isEqualToString:@"madeupdomain.com"]) { //the webview has finished loading, so show it webview.hidden = NO; return NO; } return YES; }
在您的 javascript 代码中设置一个变量标志,然后让应用程序使用计时器轮询 webview,在 webview 上调用 stringByEvaluatingJavascriptFromString 以查看该标志是否已设置。
//in your web page, in javascript window.pageHasLoaded = false; window.onload = function() { window.pageHasLoaded = true; }; //in a timer in your native app code if ([[webview stringByEvaluatingJavascriptFromString:@"window.pageHasLoaded"] isEqualToString:@"true"]) { webview.hidden = NO; }
关于javascript - DOM 就绪的 iOS UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136312/