如何从JavaScript调用原生iPhone / Android的功能? [英] How to Call Native Iphone/Android function from Javascript?

查看:158
本文介绍了如何从JavaScript调用原生iPhone / Android的功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用无论是在iPhone和Android Web视图。在Android中,我使用创建一个变量调用原生Andriod的函数/方法。但我没有能够找到iPhone类似的东西。那么,如何从JavaScript调用一个原生的iPhone功能。

I am using Web View both in Iphone and Android. In Android, I use create a variable to call native Andriod functions/methods. But I have not able to find something similar in Iphone. So, how to call a native Iphone function from JavaScript.

推荐答案

在iOS的,你可以通过执行 shouldStartLoadWithRequest 使用自定义URL方案。如果我想通过例子要更改的工具栏上的着色颜色:

iOS

In iOS you could use a custom url scheme by implementing shouldStartLoadWithRequest. If I would by example want to change the toolbar's tint color:

ViewController.h

@property (strong, nonatomic) IBOutlet UIToolbar *toolbar;

ViewController.m

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *url = request.URL;
    NSString *scheme = [url scheme];

    if ([scheme isEqualToString:@"color"]) {
        self.toolbar.tintColor = [self colorWithHexString:url.host];
    }

    return YES;
}

的Javascript

在你的JavaScript只需要改变 window.location的,其将推出的射后不理的:

Javascript

In javascript you just change window.location, which will launch a fire and forget:

window.location = 'color://' + color;

刚刚链中的参数,如:

Just chain your parameters like:

window.location = 'myscheme://param1/' + value1 + '/param2/' + value2;

只要确保你使用连接codeURIComponent 以EN code的参数(以创建一个有效的URL)。

Just make sure you use encodeURIComponent to encode your parameters (to create a valid url).

更多信息

在Android中添加的JavaScript接口:

In Android you add a javascript interface:

    WebView webView = getWebView();
    webView.loadUrl("http://localhost:8080");
    // must be after loadUrl on lower apis
    webView.addJavascriptInterface(new AndroidBridge(this), "AndroidBridge");

...

public class AndroidBridge {

    private MainActivity activity;

    public AndroidBridge(MainActivity activity) {
        this.activity = activity;
    }

    public void changeNavbarBackground(String color) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        Log.i(getClass().getSimpleName(), "changeNavbarBackground " + color);

        Field f = R.color.class.getField(color);
        final int col = (Integer) f.get(null);

        activity.changeNavbarBackground(col);
    }
}

的Javascript

在JavaScript的使用JavaScript的接口:

Javascript

In javascript you use the javascript interface:

if (window.AndroidBridge) {
            window.AndroidBridge.changeNavbarBackground(color);
}

这篇关于如何从JavaScript调用原生iPhone / Android的功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆