我该如何从JavaScript调用Objective-C方法?

3

我希望在UIWebView上显示SQLite数据库的内容。为此,我有一个本地HTML文件。在HTML文件中Body加载时调用JavaScript函数。在JavaScript内部如何调用Objective-C方法?如何从Objective-C获取数据到Java Srcipt中?

<html>
    <head>
        <!-- a script inline --> 
        <script language="JavaScript" TYPE="text/javascript">
            <!--
            function myJsFunc() 
            { 

                //here i want to call objective-c methods.

            } 
            // -->
            </script>
        </head>
    <Body Bgcolor=#800000 onload="myJsFunc(); return true;">

        </Body>
</html>

Objective-C 代码

- (void)viewDidLoad
{
        [super viewDidLoad];
        NSString *path;
    NSBundle *thisBundle = [NSBundle mainBundle];
    path = [thisBundle pathForResource:@"Demo" ofType:@"html"];

    // make a file: URL out of the path
    NSURL *instructionsURL = [NSURL fileURLWithPath:path];
    [myWebView loadRequest:[NSURLRequest requestWithURL:instructionsURL]];
    [self.view addSubView:myWebView];
}
-(NSArray*)FetchingDataFromDataBase{

    // Code for retriving data from SQlite data Base, and return NSArray;
    return myArray;
}

在函数 myJSFunc() 中,如何调用 -(NSArray*)FetchingDataFromDataBase 从数据库中获取数据。

2
请查看此博客文章:http://blog.techno-barje.fr/post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/ - graver
1
script元素上的language属性已经被弃用了十多年,现在可以省略它。type属性应该是小写的,但坦白地说,除非您包含一个不是用JavaScript编写的脚本(这是HTML5规范仅仅将现有实践编码化而不是指定新内容的领域之一),否则您不需要它。 - T.J. Crowder
1个回答

1

Graver所提供的博客文章解释了如何做到这一点。

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

如果你的类中有上述方法,这个方法将在加载新页面之前被调用。只有当这个方法返回YES时,新的加载请求才会被处理。我们使用这种机制来与Objective-C函数进行通信。

2
我可以从外部 JavaScript 调用 Objective-C 函数吗? - Musthafa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接