如何从Javascript调用原生Iphone/Android功能?

use*_*567 8 javascript iphone android

我在Iphone和Android中都使用Web View.在Android中,我使用创建变量来调用本机Andriod函数/方法.但我无法在Iphone中找到类似的东西.那么,如何从JavaScript调用本机Iphone功能.

asg*_*oth 18

iOS版

在iOS中,您可以通过实现使用自定义URL方案shouldStartLoadWithRequest.如果我想通过示例想要更改工具栏的色调颜色:

ViewController.h

@property (strong, nonatomic) IBOutlet UIToolbar *toolbar;
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

使用Javascript

在javascript中你只是改变window.location,这将发起火灾并忘记:

window.location = 'color://' + color;
Run Code Online (Sandbox Code Playgroud)

只需将您的参数链接起来:

window.location = 'myscheme://param1/' + value1 + '/param2/' + value2;
Run Code Online (Sandbox Code Playgroud)

只需确保使用encodeURIComponent对参数进行编码(以创建有效的URL).

更多信息

Android的

在Android中,您添加了一个javascript界面​​:

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

...

public class AndroidBridge {

    private MainActivity activity;

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

    @JavascriptInterface
    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Javascript

在javascript中你使用javascript界面​​:

if (window.AndroidBridge) {
            window.AndroidBridge.changeNavbarBackground(color);
}
Run Code Online (Sandbox Code Playgroud)