1
javascriptInterfaceをセットアップして、アプリケーション内でpaiement操作(webviewで行われる)の結果を取得し、適切なアクティビティを表示できるようにしました。 奇妙なことに、いくつかのデバイス(2.1)では問題なく動作しますが、私は(2.2)とDesire(2.3.3)がある銀河のS IIでは動作しません。JavascriptInterfaceがバージョンで動作しない> 2.1
私はこれがライブラリの問題であるのか、私のアプリケーションの誤解であるのか疑問に思っています。ここで
は私のコードです:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webview.getSettings().setUserAgentString(iphone_user_agent);
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new JavaScriptInterface(this), "android");
webview.loadUrl(url_paiement+"?iphone_idsession="+xml.getSession().getIdsession());
}
そして、私のクラス:
final class JavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
/**
* Function binded to webview javascript
* Called via : window.android.sendResult('result');
*/
public void sendResult(String result) {
Log.d("JavascriptInterface","OK");
//Error message depending on result
if(result.equals("OK")){
Toast.makeText(mContext, paiement_success, Toast.LENGTH_LONG).show();
BaseActivity.paiment_ok = true;
finish();
}else if(result.equals("NOK")){
Toast.makeText(mContext, paiement_error, Toast.LENGTH_LONG).show();
BaseActivity.paiment_error = true;
finish();
}else{
Toast.makeText(mContext, paiement_error_server, Toast.LENGTH_LONG).show();
BaseActivity.paiment_error = true;
finish();
}
}
}
Additionnaly、結果のHTMLページで使用されるコードは次の通りである:
<body onLoad="window.android.sendResult('OK or NOK here');">