UIWebView和JavaScript
我发现UIWebView有一种奇怪的行为 在代表中UIWebView和JavaScript,javascript,iphone,objective-c,cocoa-touch,uiwebview,Javascript,Iphone,Objective C,Cocoa Touch,Uiwebview,我发现UIWebView有一种奇怪的行为 在代表中 - (void)webViewDidFinishLoad:(UIWebView *)webView{ [self changeFont]; //[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changeFont) userInfo:nil repeats:NO]; } 在changeFont中,我调用java
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[self changeFont];
//[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changeFont) userInfo:nil repeats:NO];
}
在changeFont中,我调用javaScript来更改网页的字体。它不会被应用,但如果我在代理webViewDidFinishLoad延迟几秒钟后调用ChangeFont方法,那么它将被应用。
如果文件很大,如果必须从代理webViewDidFinish启动计时器以应用文件的字体大小和样式,我们如何确定webview加载所需的时间
对此没有任何解释。我查了很多资料,文件里什么也没提到
为什么UIWebView会出现这种行为 尝试在主线程上调用“changeFont”方法。类似于[self-performSelectorInMainThread:…] 尝试在主线程上调用“changeFont”方法。类似于[self-performSelectorInMainThread:…] 我认为这是因为当
-(void)webViewDidStartLoad:(UIWebView*)webView
方法触发时,网页可能无法完全呈现(我指的是所有javascript、资源等)
这解释了为什么您的方法在延迟一段时间后第二次工作..(页面已完全加载)
您可以使用javascript到objective-c的回调来确定渲染过程是否结束,
有关此功能的更多信息(或小技巧)可以通过链接在“Javascript与Objective-C代码通信”部分找到
或者使用
stringByEvaluatingJavaScriptFromString:
-我已经提供了一个在另一个相关主题中使用它的示例我认为这是因为在触发-(void)webViewDidStartLoad:(UIWebView*)webView
方法时,网页可能无法完全呈现(我指的是所有javascript、资源等)
这解释了为什么您的方法在延迟一段时间后第二次工作..(页面已完全加载)
您可以使用javascript到objective-c的回调来确定渲染过程是否结束,
有关此功能的更多信息(或小技巧)可以通过链接在“Javascript与Objective-C代码通信”部分找到
或者使用
stringByEvaluatingJavaScriptFromString:
-我在另一个相关主题中提供了一个使用它的示例苹果的文档解释说,在完成/开始加载帧时将调用webviewdiffinishload
和webviewdifestoad
因此,在调用webViewDidFinishLoad
之后(当加载基本html时),页面中可能还有JavaScript或Ajax仍在执行。你需要等待他们全部完成
我建议两种尝试方法:
苹果的文档解释说,在完成/开始加载帧时,将调用
webViewDidFinishLoad
和webViewDidStartLoad
因此,在调用webViewDidFinishLoad
之后(当加载基本html时),页面中可能还有JavaScript或Ajax仍在执行。你需要等待他们全部完成
我建议两种尝试方法:
可能吗?不,它不会发射多次。它只发射一次。我的问题是,为什么在接收器中的内容仍在加载时调用委托。当receiver获得内容时,应调用webViewDidFinishLoad。在webViewDidFinishLoad中,如果(myWebView.loading==YES){NSlog(@“仍在加载”);}并且日志在控制台中打印,则表示未加载web视图并且正在调用委托。可能吗?不,它不会多次触发。它只触发一次。我的问题是,为什么在接收器中的内容仍在加载时调用委托。当receiver获得内容时,应调用webViewDidFinishLoad。在webViewDidFinishLoad中,如果(myWebView.loading==YES){NSlog(@“仍在加载”);}并且日志是在控制台中打印的,我会这样检查,这意味着未加载web视图,并且正在调用委托。