我发现 UIWebView 的行为很奇怪。
在委托(delegate)中
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[self changeFont];
//[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changeFont) userInfo:nil repeats:NO];
}
在changeFont中,我调用javaScript来更改网页的字体。它不会被应用,但如果我在委托(delegate) webViewDidFinishLoad 延迟几秒后调用更改字体方法,那么它将被应用。 如果文件很大,如果我们必须从委托(delegate) webViewDidFinish 触发计时器来应用文件的字体大小和样式,我们如何确定 webview 加载需要多长时间。
对此的任何解释。我搜索了很多,但文档中没有提到任何内容。
有什么帮助为什么 UIWebView 会出现这种行为吗?
最佳答案
Apple 的文档解释说,当完成/开始加载 frame 时,将调用 webViewDidFinishLoad
和 webViewDidStartLoad
因此,在调用 webViewDidFinishLoad
后(加载基本 html 时),页面中可能还有 JavaScript 或 Ajax 仍在执行。您需要等待所有这些都完成。
我建议尝试两种方法:
- 向UIWebView的loading属性添加一个观察者
- 将自定义 JavaScript 绑定(bind)到页面来判断您想要的事件是否真正发生(例如所有元素都已加载),然后使用 JavaScript 将您的回调回调到 Objective-C
后一个在处理自定义事件时更强大。我回答的这个问题可能会有所帮助:
关于javascript - UIWebView 和 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2778865/