shouldStartLoadWithRequest不运行stringByEvaluatingJavaScriptFromString方法

时间:2013-07-15 10:59:34

标签: iphone objective-c cocoa-touch uiwebview

我正在尝试在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)"]];
}

1 个答案:

答案 0 :(得分:2)

文档说明方法webView:shouldStartLoadWithRequest:在网页视图开始加载框架之前发送。在此方法中返回YES后,Web视图开始加载请求。因此,您执行的任何JavaScript都不起作用,因为在您的JS调用之后将加载一个新页面。

您可以使用webViewDidFinishLoad:方法在页面加载完成后执行javascript。或者,如果您想通过单击链接来触发JS,则可以使用shouldStartLoadWithRequest但是从中返回NO。