【问题标题】:UIWebView and JavaScriptUIWebView 和 JavaScript
【发布时间】:2011-02-16 06:10:19
【问题描述】:

我发现 UIWebView 的一个奇怪行为。

在委托中

- (void)webViewDidFinishLoad:(UIWebView *)webView{    
    [self changeFont];    
    //[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changeFont) userInfo:nil repeats:NO];
}

在 changeFont 中,我正在调用 javaScript 来更改网页的字体。它不会被应用,但如果我在委托 webViewDidFinishLoad 延迟几秒钟后调用更改字体方法,那么它将被应用。 如果文件很大,如果我们必须从委托 webViewDidFinish 触发计时器以应用文件的字体大小和样式,我们如何确定加载 webview 需要多少时间。

对此的任何解释。我搜索了很多,文档中没有提到任何内容。

任何帮助为什么 UIWebView 的这种行为?

【问题讨论】:

  • 可能是firing more than once
  • 不,它不会多次触发。它只会触发一次。我的问题是为什么在接收器中的内容仍在加载时调用委托。当接收者获得内容时,应该调用 webViewDidFinishLoad。在 webViewDidFinishLoad 我这样检查 if(myWebView.loading ==YES){NSlog(@"still loading");} 并且日志打印在控制台中,这意味着未加载 Web 视图并且正在调用委托。

标签: javascript iphone objective-c cocoa-touch uiwebview


【解决方案1】:

尝试在主线程上调用“changeFont”方法。喜欢 [self performSelectorInMainThread:...];

【讨论】:

    【解决方案2】:

    我认为这是因为在- (void)webViewDidStartLoad:(UIWebView *)webView 方法被触发时,网页可能没有完全呈现(我的意思是所有的javascript、资源等)

    这解释了为什么您的方法在延迟后第二次起作用..(页面已完全加载)

    您可以使用从javascript到objective-c的回调来确定渲染过程是否结束, 有关此功能(或小技巧)的更多信息,您可以在链接http://www.codingventures.com/2008/12/using-uiwebview-to-render-svg-files/ 中找到:“Javascript 与 Objective-C 代码通信”部分。

    或使用stringByEvaluatingJavaScriptFromString: - 我在另一个相关主题https://stackoverflow.com/a/8560489/857417 中提供了使用它的示例

    【讨论】:

      【解决方案3】:

      Apple 的文档解释说,webViewDidFinishLoadwebViewDidStartLoad 将在完成/开始加载 时被调用
      因此,在调用webViewDidFinishLoad 之后(加载基本html 时),页面中可能仍有JavaScript 或Ajax 仍在执行。您需要等待所有这些都完成。

      我会建议两种方法来尝试:

      1. 向 UIWebView 的加载属性添加观察者
      2. 将自定义JavaScript绑定到页面,判断你想要真正发生的事件(比如所有元素都加载了),然后使用JavaScript回调你到Objective-C

      后者在处理自定义事件时更强大。我回答的这个问题可能会有所帮助:

      1. detect YouTube Player event and callback using UIWebView
      2. Javascript callback in Objective-C

      【讨论】:

        猜你喜欢
        • 2016-11-06
        • 2017-08-06
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多