Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用API级别为18的Android WebView评估JavaScript_Javascript_Android_Webview - Fatal编程技术网

使用API级别为18的Android WebView评估JavaScript

使用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

我已经为我的公司开发了一款Android应用程序很长时间了,它工作得很好,使用webview并在本机功能之间来回调用。如果相关,这里是我的应用程序的Java入口点:

@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或更高。