【问题标题】:is it possible to extend UIWebViewDelegate so that delegate can be notified when document.ready rather than window.onload是否可以扩展 UIWebViewDelegate 以便在 document.ready 而不是 window.onload 时通知委托
【发布时间】:2015-07-09 03:22:56
【问题描述】:

我有一个UIWebView,我想在WebView内容加载后做一些操作,所以我设置了UIWebViewDelegate,监听webViewDidFinishLoad:方法,希望WebView加载的时候能收到通知。

由于我请求的url有一些图片和很多img标签,我发现WebView的webViewDidFinishLoad方法调用很慢。

在苹果的文件中说

webViewDidFinishLoad:
Sent after a web view finishes loading a frame.

它没有解释什么是“完成加载帧”。所以我尝试修改我的网页,并在其中添加一些 js 代码,然后使用 Charles 添加一些 Throttling 配置,这样我的图像加载速度可能会非常非常慢。代码如下:

$(document).ready(function() {
  alert('ready');
});
window.onload = function() {
  alert('load');
};

就绪警报显示非常快,但加载警报仅在我的图像完全加载后才显示,然后调用了委托方法webviewDidFinishLoad:

这很糟糕。因为我的网页总是有一些图片,我不想等我的图片完全加载后才进行操作,我也想知道文档已经加载,这样我可以更早地进行一些操作。

那么,在 UIWebviewDelegate 告诉我整个内容已加载之前,我有什么方法可以知道 document.ready 事件?

【问题讨论】:

    标签: javascript ios uiwebview hybrid-mobile-app hybrid


    【解决方案1】:

    您可以从 $(document).ready() 中通知您的本机代码。

    在 JS 中你这样做:

    $(document).ready(function(){
          window.location.href = "native:docReady";
    });
    

    在OC中需要实现UIWebViewDelegate协议,实现如下方法:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        if ([[[request URL] absoluteString] isEqualToString: @"native:docReady") {
              // do whatever you want.
        }
    }
    

    希望这会有所帮助,现在还为时不晚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      相关资源
      最近更新 更多