iosとandroidでjs機能、すなわちwebとappのインタラクティブ機能の実現を同時にサポートする


現在appではwebと原生appのインタラクションを実現する必要があり、関連資料とapiを調べた結果、大体の機能は以下のように実現された.まずサーバのコードです.サーバはphpを使用しています.
/* * 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では、より良いユーザー体験のために、WebViewClientshouldOverrideUrlLoadingで次のようなジャンプを阻止する必要がある.
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url != null && url.contains(":darling:")) {//    app   
            return true;
        }else{
           return false; 
        }
    }