使用API级别为18的Android WebView评估JavaScript
我已经为我的公司开发了一款Android应用程序很长时间了,它工作得很好,使用webview并在本机功能之间来回调用。如果相关,这里是我的应用程序的Java入口点:使用API级别为18的Android WebView评估JavaScript,javascript,android,webview,Javascript,Android,Webview,我已经为我的公司开发了一款Android应用程序很长时间了,它工作得很好,使用webview并在本机功能之间来回调用。如果相关,这里是我的应用程序的Java入口点: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_POR
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webview);
final Context that = this;
myWebView.addJavascriptInterface(new WebAppInterface(this, this), "Android");
myWebView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
myWebView.evaluateJavascript("pageFinished()", null);
}
});
pm = this.getPackageManager();
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setDomStorageEnabled(true);
WebView.setWebContentsDebuggingEnabled(true);
Window window = getWindow();
//window.setStatusBarColor(Color.parseColor("#3596d4"));
myWebView.loadUrl("file:///android_asset/index.html");
IntentFilter filter = new IntentFilter();
filter.addCategory(Intent.CATEGORY_DEFAULT);
filter.addAction(getResources().getString(R.string.activity_intent_filter_action));
registerReceiver(myBroadcastReceiver, filter);
mDetector = new GestureDetectorCompat(that, this);
myWebView.setOnTouchListener(touchListener);
}
现在,当我在gradle文件中将最低版本设置为18时,有些行被Android Studio标记为“不受API 18支持”,最明显的是我的myWebView.evaluateJavascript
调用,还有一些其他东西,如WebView.setWebContentsDebuggingEnabled
如何在API 18中执行evaluateJavascript
在某些地方,当我调用evaluateJavascript
时,我希望得到响应,例如:
myWebView.evaluateJavascript("Back.go()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String canGoBack) {
if (canGoBack.equals("false")) {
moveTaskToBack(true);
} else {
// don't need to do anything, already called Back.go()
// that means the javascript already handled navigation
}
}
});
myWebView.evaluateJavascript(“Back.go()”,new ValueCallback()){
@凌驾
接收值上的公共void(字符串canGoBack){
if(canGoBack.equals(“false”)){
moveTaskToBack(真);
}否则{
//不需要做任何事情,已经回过电话了。go()
//这意味着javascript已经处理了导航
}
}
});
API 18是否可能实现这一点
如何在API 18中评估JavaScript
使用loadUrl(“javascript:…”),其中
…`是您的javascript代码
API 18是否可能实现这一点
不,对不起。最接近的方法是让JavaScript代码调用通过addJavascriptInterface()
注入的WebAppInterface
上的内容
请注意,目前 注意,Google Play商店不允许上传的应用程序低于SDK级别24。因此,如果此应用需要通过应用商店分发,则必须将最低SDK级别设置为24或更高。