iosとandroidでjs機能、すなわちwebとappのインタラクティブ機能の実現を同時にサポートする
6003 ワード
現在appではwebと原生appのインタラクションを実現する必要があり、関連資料とapiを調べた結果、大体の機能は以下のように実現された.まずサーバのコードです.サーバはphpを使用しています.
ISOクライアントで使用:比較的簡単で、ユーザーがクリックした列を判断し、判断文字列を切り取ることで、サーバーと定義した辞書に基づいて、異なる行為を行う.
Javaクライアントで使用:android公式はjsとインタラクティブなインタフェースを提供しています.5.0以降、プログラマーはクラス名の前に
そしてwebViewが初期化されたとき;
そして
Androidでは、より良いユーザー体験のために、
/* * cmd --> key * parm --> value */
function sendConment(cmd,parm){
var url = ":darling:click_tel:darling:"+cmd+":darling:"+parm;
document.loction = url;
client_click.click_tel(parm);
}
ISOクライアントで使用:比較的簡単で、ユーザーがクリックした列を判断し、判断文字列を切り取ることで、サーバーと定義した辞書に基づいて、異なる行為を行う.
- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSURL *url = [request URL];
NSString *requestString = [url absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@":darling:"];
if (components.count > 1) {
NSString *identifier = components[1];//
NSString *argsKey = components[2];//
NSString *argsValue = components[3];//
if ([identifier isEqualToString:@"click_tel"]) {
//
return NO;
}
}
return YES;
}
Javaクライアントで使用:android公式はjsとインタラクティブなインタフェースを提供しています.5.0以降、プログラマーはクラス名の前に
@SuppressLint("JavascriptInterface")
を明示的に宣言する必要がある.@SuppressLint("JavascriptInterface")
public class WebInfoActivity extends BaseClientActivity {
...
}
そしてwebViewが初期化されたとき;
// js ;
// , ;
webView.addJavascriptInterface(new OrderInfo(), "client_click");
そして
public final class OrderInfo {
//JavaScript
@JavascriptInterface
public void click_tel(final String parms) {
AlertDialog.Builder builder = new AlertDialog.Builder(WebInfoActivity.this);
builder.setTitle(" ");
builder.setMessage(parms);
builder.setPositiveButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + parms));
startActivity(intent);
}
});
builder.setNegativeButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create();
builder.show();
}
}
Androidでは、より良いユーザー体験のために、
WebViewClient
のshouldOverrideUrlLoading
で次のようなジャンプを阻止する必要がある.@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.contains(":darling:")) {// app
return true;
}else{
return false;
}
}