从JavaScript函数调用UIViewController

从JavaScript函数调用UIViewController,javascript,iphone,objective-c,xcode,Javascript,Iphone,Objective C,Xcode,我试图从项目中的JavaScript函数调用UIViewController。我被要求对此应用程序进行一些更改,我需要调用一个新的UIViewController。我已经找到了可以调用JavaScript函数的地方,但我需要换一种方式,打开一个带有一些文本的UIViewController。有没有人有关于如何使用Xcode项目代码实现这一点的示例 谢谢。对于我会使用的简单电话。这需要通过添加一个JSBridge.js头文件来修改javascript端。我已经测试过了,效果很好 一般的想法是jav

我试图从项目中的JavaScript函数调用UIViewController。我被要求对此应用程序进行一些更改,我需要调用一个新的UIViewController。我已经找到了可以调用JavaScript函数的地方,但我需要换一种方式,打开一个带有一些文本的UIViewController。有没有人有关于如何使用Xcode项目代码实现这一点的示例


谢谢。

对于我会使用的简单电话。这需要通过添加一个JSBridge.js头文件来修改javascript端。我已经测试过了,效果很好

一般的想法是javascript可以重定向您实际浏览的地址。当发生这种情况时,本机回调
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)导航类型将通过包含URL的特殊命令调用。此URL是从javascript传递的,然后您可以在回调中解析此URL并调用适当的操作

一般来说,您可以创建自己的JSBridge功能,其工作原理如下:

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

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

  • 在您的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;    
    }
    

    通过这种方式,您在shouldstartdoadwithrequest中截获了该命令,然后在ViewController本机代码中执行该命令,并返回NO,即webView取消加载页面。

    谢谢,但我不确定这正是我要查找的。另外,我试着下载并运行JSBridge示例,他们说我需要JSON框架,他们说它包括在内,但没有。我找不到要安装的框架。我不想跳回UIWebView,我需要从Javascript跳回标准UIViewController。你知道这是否可行吗?再次感谢。您需要截获传入的URL,并将其转换为如上所示的命令。我认为我在这里走对了方向,感谢您的帮助。现在唯一的想法是在代码中找到上面代码的位置。在MainViewController中,shouldStartLoadWithRequest被注释掉。该应用程序使用Cordova(又名PhoneGap),并具有ChildBrowser和ASIHTTPRequest。我的任务是向新的UIViewController添加一个跳转。如果您还有其他想法,我们将不胜感激。再次感谢!我没有使用ASIHTTPRequest,但我会尝试使用:-(void)request:(ASIHTTPRequest*)request willRedirectToURL:(NSURL*)newURL截取代理中的URL;或-(void)requestStarted:(ASIHTTPRequest*)请求;