10

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

4

2 回答 2

20

iOS

在 iOS 中,您可以通过实现shouldStartLoadWithRequest. 如果我想更改工具栏的色调颜色:

视图控制器.h

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

视图控制器.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,这将引发火灾并忘记

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

只需链接您的参数,例如:

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

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

更多信息

安卓

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

    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;
    }

    @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);
    }
}

Javascript

在 javascript 中,您使用 javascript 接口:

if (window.AndroidBridge) {
            window.AndroidBridge.changeNavbarBackground(color);
}
于 2013-01-06T12:23:32.867 回答
0

Webview 的 Firebase 分析示例将为实现此功能提供更多见解。请检查此样本

为了进行测试,您可以在某些服务器上托管示例 Web 部件并在 Webview 上加载该 URL。

于 2019-11-18T06:59:22.423 回答