如何从 html / javascript 调用 MainViewController.h 方法? (IOS 电话间隙)

Posted

技术标签:

【中文标题】如何从 html / javascript 调用 MainViewController.h 方法? (IOS 电话间隙)【英文标题】:how to call MainViewController.h methods from html / javascript ? ( IOS Phonegap) 【发布时间】:2013-12-21 08:32:31 【问题描述】:

我是 ios phonegap 的新手。在我的应用程序中,我需要从我的应用程序发送邮件。所以我正在使用“mailto”功能它工作正常,但问题是在发送邮件后它没有返回到我的应用程序它只停留在邮件应用程序中。我该如何解决这个问题。

如果我使用下面的代码而不是“mailto”来发送邮件,我如何通过单击按钮从我的 html/javascript 链接到“Mainviewcontroller.h”。以及如何将参数从 javascript/html 传递到“Mainviewcontroller.h”类。

NSString *subject = @"Message subject";
NSString *body = @"Message body";
NSString *address = @"test1@akosma.com";
NSString *cc = @"test2@akosma.com";
NSString *path = [NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@&body=%@", address, cc, subject, body];
NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];

请给我一些建议或指导我一些好的教程来解决我的问题。

提前谢谢..

【问题讨论】:

【参考方案1】:

如果不使用UIWebView,则不能从JavaScript 调用Objective C 方法。

您可以使用 UIWebView 来实现,如下所示:

在您的 JavaScript 文件中:

...
 window.location.href = "doSomething;";
..

编辑:

在你的MainViewController.m 中,你可以添加一个“假”的 UIWebView,在MainViewController.m's viewDidload 中是这样的:

 - (void)viewDidLoad
        UIWebView *webView = [UIWebView alloc] init];
        webView.hidden = YES;
        webView.delegate = self;
       [sel.view addSubView:webView];

        // Know you should load the JavaScript witch contain the script.
        [webView loadHTMLString:...];
   

MainViewControllerUIWebViewDelegate一致

现在在您的 UIWebViewDelegate (MainViewController.m) 对象中:

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

    if ([request.URL.absoluteString isEqualToString:doSomething]) 
            // Here you can call what you want
            return NO;
        
        return YES;
    

【讨论】:

非常感谢重播,但我在哪里可以添加以下代码 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType if ([request .URL.absoluteString isEqualToString:doSomething]) // 这里你可以调用你想要的 return NO; 返回是; 你把你的 JavaScript 脚本放了吗?它是在单独的文件 .js 中还是嵌入在您的 html 文件中? 我说的是不是 java script 的 Objective C 代码。javascript 代码包含在我的 html 中,我应该在哪里放置此代码 ==>-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType if ([request.URL.absoluteString isEqualToString:doSomething]) // 这里你可以调用你想要的 return NO; 返回是;

以上是关于如何从 html / javascript 调用 MainViewController.h 方法? (IOS 电话间隙)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 html / javascript 调用 MainViewController.h 方法? (IOS 电话间隙)

如何从Javascript调用Objective-C方法并将数据发送回iOS中的Javascript?

如何使用 QT/python 从 Javascript 调用 C++ 函数?

如何从 PyQT 调用 javascript 函数

如何使用 javascript 绑定项目从 cocos2d html5 调用本机 ios api?

如何知道何时从控制台调用 JavaScript 函数? [复制]