javascript - DOM 就绪的 iOS UIWebView

标签 javascript objective-c ios uiwebview onload

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

最佳答案

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

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

相关文章:

ios - 应用程序因不遵循 iOS 数据存储指南而被拒绝

javascript - jquery 使用 URL 作为变量和回调加载

javascript - 如果 window.width 小于 950px jQuery,则提醒用户

javascript - 如何以编程方式更改选项卡?

iphone - 关于如何实现新的 VerificationController 和 KNOWN_TRANSACTIONS_KEY 常量的任何示例?

ios - 将字符串转换为 NSString 时出现问题

ios - UINavigationController 具有跨所有 ViewController 的统一背景

ios - 单击提要中的个人资料 - swift

javascript - 将文本中的单词保存到数组中

ios - UITableView:如何通过长按更改自定义单元格中的 UIView 状态?