【发布时间】:2012-02-03 22:21:13
【问题描述】:
我的问题是 UIWebView 在其内容呈现之前触发 webViewDidFinishLoad,因此在我显示视图后,我会在显示视图内容之前得到短暂的延迟。 DOM 完全渲染后是否可以触发事件?
【问题讨论】:
标签: javascript objective-c ios uiwebview onload
我的问题是 UIWebView 在其内容呈现之前触发 webViewDidFinishLoad,因此在我显示视图后,我会在显示视图内容之前得到短暂的延迟。 DOM 完全渲染后是否可以触发事件?
【问题讨论】:
标签: javascript objective-c ios uiwebview onload
是的,为此使用 JavaScript。在您的 HTML 页面中添加一个 window.onload JavaScript 处理程序,然后当它触发时,您可以执行以下两项操作之一:
通过加载虚假 URL 并使用 webview 委托拦截它来调用应用程序。例如
//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 代码中设置一个变量标志,然后让应用程序使用在 web 视图上调用 stringByEvaluatingJavascriptFromString 的计时器来轮询 webview,以查看该标志是否已设置。
//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;
}
【讨论】:
试试这个
@interface LoadNewsPageController : UIViewController <UIWebViewDelegate>
@property(nonatomic, weak) IBOutlet UIWebView *webView;
@end
@implementation LoadNewsPageController {
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.webView.delegate = self;
NSLog(@"%@", self.newsObject.url);
NSURL *websiteUrl = [NSURL URLWithString:@"http://google.com"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:websiteUrl];
[self.webView loadRequest:urlRequest];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if ([[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
// UIWebView object has fully loaded.
NSLog(@"Dom ready");
}
}
@end
【讨论】: