我正在尝试在webview的shouldStartLoadWithRequest委托方法中运行下面的代码,但它没有做任何更改。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSLog(@"webView shouldStartLoadingWithRequest");
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.execCommand('bold', false,null)"]];
return TRUE;
}
没有错误,它打印NSLog和方法中的所有内容都很有效,除了“stringByEvaluatingJavaScriptFromString”方法。
但是如果我尝试在另一个函数中使用粗体文本,例如IBAction方法,则可以正常工作。
-(IBAction)boldClick:(id)sender
{
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.execCommand('bold', false,null)"]];
}
实际上,这是我公司的特殊应用程序,这个UIWebView不会显示网页。我用它来显示一些自定义HTML页面。 我需要在“shouldStartLoadWithRequest”中创建所有内容,因为我正在尝试从javascript运行objective-c方法。
更新
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
// Break apart request URL
NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@":"];
// Check for your protocol
if ([components count]==3)
{
[self makeBoldText];
return NO;
}
else
{
return TRUE;
}
}
-(void)makeBoldText
{
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.execCommand('bold', false,null)"]];
}
答案 0 :(得分:2)
文档说明方法webView:shouldStartLoadWithRequest
:在网页视图开始加载框架之前发送。在此方法中返回YES后,Web视图开始加载请求。因此,您执行的任何JavaScript都不起作用,因为在您的JS调用之后将加载一个新页面。
您可以使用webViewDidFinishLoad:
方法在页面加载完成后执行javascript。或者,如果您想通过单击链接来触发JS,则可以使用shouldStartLoadWithRequest
但是从中返回NO。