【问题标题】:How can I call Objective-C methods from JavaScript?如何从 JavaScript 调用 Objective-C 方法?
【发布时间】:2012-04-29 17:04:12
【问题描述】:

我想在 UIWebView 上显示 SQLite 数据库内容。为此,我有一个本地 HTML 文件。在调用 JavaScript 函数的 html 文件中加载正文。 Java Script里面如何调用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.

【问题讨论】:

  • script 元素上的 language 属性已被弃用十多年,您现在可以将其关闭。 type 属性应该是小写的,但坦率地说,你 don't need it 除非你包含一个用 JavaScript 编写的 not 脚本(这是 HTML5 规范正在编纂的领域之一现有的做法,而不是口述新的东西)。

标签: javascript iphone objective-c ios uiwebview


【解决方案1】:

graver 给出的博客文章解释了如何做到这一点。

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

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

【讨论】:

  • 我可以从外部 Java 脚本调用 Objective c 函数
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 2011-02-13
  • 2023-03-29
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多