現在、私はアンドロイドからjavascriptを呼び出す最良の方法を見つけようとしています。Android WebView evaluateJavascript Uncaught ReferenceError
- AndroidJSCore。 AndroidJSCore
- 私はAndroidJSCoreを試してみた
WebViewのは、それは素晴らしいことです。しかし、それはapkのサイズを拡大するでしょう。 その後、私はWebViewを使ってJavaScriptを起動しようとしています。しかし、失敗する。
活動は、次のようになります。そこ
public class WebViewActivity extends AppCompatActivity {
private WebView webView;
private static final String TAG = WebViewActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
webView = (WebView)findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportZoom(true);
webSettings.setDisplayZoomControls(true);
webView.loadUrl("file:///android_asset/jsWeb/test.html");
webView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
String test1 = "permissionRegist(\"'function'\", [\"'319609831167500021'\",\"'319609831167500022'\",\"'319609831167500023'\",\"'419609839767500020'\",\"'644731700926740003'\",\"'644731700926740004'\",\"'854885785357389824'\",\"'854995673156816896'\",\"'855001385022918656'\",\"'855009454683459584'\",\"'855298661779902464'\",\"'855303143108513792'\",\"'855347061611171840'\",\"'855356859882803200'\"])";
String test2 = "evalJSExpression()";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(test1, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d(TAG, s);
}
});
webView.evaluateJavascript(test2, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d(TAG, s);
}
});
}
}
});
}
}
追加ファイルは、次のとおりです。
android.js
function permissionRegist(type, list) {
var s_permissionMap = new Map();
s_permissionMap.set(type, list);
}
function evalJSExpression() {
var result = 'dddddd';
return result;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LogicalExpression</title>
<!-- 导入script -->
<script type="text/javascript" src="android.js"></script>
</head>
<body>
<!--<button onClick="permissionRegist()">点击读取文件</button>-->
</body>
</html>
が、結果は次のとおりです。
I/chromium: [INFO:CONSOLE(2)] "Uncaught ReferenceError: Map is not defined", source: file:///android_asset/jsWeb/android.js (2)
D/WebViewActivity: null
D/WebViewActivity: "dddddd"
うん、私は試した。しかし、それはうまく動作しないようだ、その後私はAndroidJSCore libに回った。 –
ネイティブに反応してみましたか? JavaScriptを呼び出すことができない場合があります。しかし、あなたはネイティブにあなたのjavascriptアプリケーションを変換することができ、それはあなたの既存のネイティブアプリから呼び出すことができます。 https://facebook.github.io/react-native/docs/integration-with-existing-apps.html – NSK
私たちは、javascript関数を使っていくつかのデータを計算しようとしています。したがって、アンドロイドとiOSの両方でjavascriptのソースコードを使用することができます。もちろん、それは小さなコードセットです。しかし他はネイティブコードです。 ReactNativeの使用をまだ検討していません。何らかの理由で... @NSK –