gpt4 book ai didi

javascript - 如何从 Javascript 调用原生 Iphone/Android 函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:37 24 4
gpt4 key购买 nike

我在 Iphone 和 Android 中都使用 Web View 。在 Android 中,我使用 create a variable调用 native Andriod 函数/方法。但我无法在 Iphone 中找到类似的东西。那么,如何从 JavaScript 调用 native Iphone 函数。

最佳答案

iOS

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

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,这将启动一个fire and forget:

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

只需像这样链接您的参数:

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

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

More info

安卓

在 Android 中你添加一个 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;
}

@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 接口(interface):

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

关于javascript - 如何从 Javascript 调用原生 Iphone/Android 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com