1

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

1 回答 1

2

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

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

于 2013-07-15T12:09:07.420 回答