1

我正在尝试从我的项目中的 JavaScript 函数调用 UIViewController。我被要求对这个应用程序进行一些更改,我需要在其中调用一个新的 UIViewController。我找到了可以调用 JavaScript 函数的地方,但我需要另辟蹊径,打开一个 UIViewController,上面有一些文本。有没有人有如何使用 Xcode 项目代码执行此操作的示例?

谢谢你。

4

1 回答 1

0

对于简单的调用,我会使用JSBridge。这需要通过添加一个 JSBridge.js 头文件来修改您的 javascript 端。我已经对其进行了测试,并且可以正常工作。

一般的想法是javascript可以重定向您实际浏览的地址。当它发生时,- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType使用包含特殊命令的 URL 调用本机回调。此 URL 是从 javascript 传递的,然后您可以在回调中解析此 URL 并调用适当的操作。

一般来说,您可以制作自己的 JSBridge 功能,它应该像这样工作:

  1. 当您想要执行任何命令时,在您的 javascript 中调用:

    window.location.href="command://goToHomeViewController"

  2. 在您的 webView 委托中,您使用此 javaScript 加载了该页面,您为您的命令制作了一个钩子。

在你的 ViewController.m

(BOOL)webView:(UIWebView *)p_WebView shouldStartLoadWithRequest:(NSURLRequest *)request         navigationType:(UIWebViewNavigationType)navigationType  
{

    BOOL result = YES;
    NSString *urlString = [[request URL] absoluteURL];
    if ([urlString compare:@"command://goToHomeViewController"] == NSOrderedSame) 
    {
        result = NO;
        [self goToHomeViewController];
    }

    return result;    
}

这样你就在你的 shouldStartLoadWithRequest 中截获了命令,然后你在 ViewController 本机代码中执行命令并返回 NO 表示 webView 取消加载页面。

于 2012-10-21T02:28:02.613 回答