在iOS中,您可以通过实现使用自定义URL方案 shouldStartLoadWithRequest 。如果我想通过示例想要更改工具栏的色调颜色:
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中你只是改变 window.location ,这将推出一个 火,忘了 :
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界面:
if (window.AndroidBridge) { window.AndroidBridge.changeNavbarBackground(color); }