【问题标题】:iOS UIWebView on DOM ReadyiOS UIWebView on DOM Ready
【发布时间】:2012-02-03 22:21:13
【问题描述】:

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

【问题讨论】:

    标签: javascript objective-c ios uiwebview onload


    【解决方案1】:

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

    1. 通过加载虚假 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;
      }
      
    2. 在您的 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;
      }
      

    【讨论】:

      【解决方案2】:

      试试这个

      @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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多