Iphone と Android の両方で Web ビューを使用しています。Android では、create a variableを使用して、ネイティブの Android 関数/メソッドを呼び出します。しかし、私はiPhoneで似たようなものを見つけることができませんでした. というわけで、JavaScriptからiPhoneのネイティブ関数を呼び出す方法。
質問する
18136 次
2 に答える
20
iOS
iOSでは、を実装することでカスタムURLスキームを使用できますshouldStartLoadWithRequest
。例として、ツールバーの色合いを変更したい場合は、次のようにします。
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
javascriptwindow.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 に答える