Javascript DOM就绪上的iOS UIWebView

Javascript DOM就绪上的iOS UIWebView,javascript,objective-c,ios,uiwebview,onload,Javascript,Objective C,Ios,Uiwebview,Onload,我的问题是UIWebView在呈现其内容之前触发webViewDidFinishLoad,因此在显示视图之后,在显示视图内容之前会有一个短暂的延迟。完全呈现DOM时是否可以触发事件?是的,请使用JavaScript执行此操作。在HTML页面中添加window.onload JavaScript处理程序,然后当它启动时,您可以执行以下两项操作之一: 通过加载一个假URL并使用webview委托截取该URL来调用应用程序。例如 //in your web page, in javascript w

我的问题是UIWebView在呈现其内容之前触发webViewDidFinishLoad,因此在显示视图之后,在显示视图内容之前会有一个短暂的延迟。完全呈现DOM时是否可以触发事件?

是的,请使用JavaScript执行此操作。在HTML页面中添加window.onload JavaScript处理程序,然后当它启动时,您可以执行以下两项操作之一:

  • 通过加载一个假URL并使用webview委托截取该URL来调用应用程序。例如

    //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上调用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
    
    @接口LoadNewsPageController:UIViewController
    @属性(非原子,弱)ibuiwebview*webView;
    @结束
    @LoadNewsPageController的实现{
    }
    -(无效)viewDidLoad{
    [超级视图下载];
    //加载视图后执行任何其他设置。
    self.webView.delegate=self;
    NSLog(@“%@”,self.newobject.url);
    NSURL*网站URL=[NSURL URLWithString:@”http://google.com"];
    NSURLRequest*urlRequest=[nsurlRequestRequestWithURL:websiteUrl];
    [self.webView loadRequest:urlRequest];
    }
    -(无效)webViewDidFinishLoad:(UIWebView*)webView{
    如果([[webView stringByEvaluatingJavaScriptFromString:@“document.readyState”]IsequalString:@“complete”]){
    //UIWebView对象已完全加载。
    NSLog(@“Dom就绪”);
    }
    }
    @结束