10

Iphone と Android の両方で Web ビューを使用しています。Android では、create a variableを使用して、ネイティブの Android 関数/メソッドを呼び出します。しかし、私はiPhoneで似たようなものを見つけることができませんでした. というわけで、JavaScriptからiPhoneのネイティブ関数を呼び出す方法。

4

2 に答える 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 に答える