Android 通过webview加载H5页面 alert不显示

要想让加载的H5页面中的alert显示出来需要在Android端设置:

1. setJavaScriptEnabled

2. setWebChromeClient

完整代码如下:

package com.example.yunlanlink;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;

import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;


public class DeviceInfo extends AppCompatActivity {
    WebView webView;
    Context ctx = this;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_device_info);
        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null){
            actionBar.setHomeButtonEnabled(true);
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setTitle("设备详情");
        }
        initWebView();
    }
    @Override
    protected void onDestroy() {
        //释放资源
        if (webView != null)
            webView.destroy();
        super.onDestroy();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        Log.d(AppYunlanLink.TAG, "onOptionsItemSelected: " + item.getItemId());
        Log.d(AppYunlanLink.TAG, "onOptionsItemSelected home id " + android.R.id.home);
        switch (item.getItemId()){
            case android.R.id.home:
                this.finish();
//                onBackPressed();
                return  true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    private void initWebView() {
        webView = new WebView(this);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);

        settings.setBuiltInZoomControls(false);//webview 禁止手势缩放
        settings.setSupportZoom(false);
        settings.setDisplayZoomControls(false);

        settings.setDomStorageEnabled(true);  // 开启 DOM storage 功能
        settings.setAllowUniversalAccessFromFileURLs(true); // 设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源)
        settings.setAllowFileAccess(true);

        settings.setUseWideViewPort(true);
        settings.setLoadWithOverviewMode(true);
        settings.setDefaultTextEncodingName("UTF-8");
        settings.setJavaScriptCanOpenWindowsAutomatically(true);

        //响应webview 加载H5页面中的alert函数,否则alert显示不出来
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                AlertDialog.Builder b = new AlertDialog.Builder(ctx);
                b.setTitle("title");
                b.setMessage(message);
                b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        result.confirm();
                    }
                });
                b.create().show();
                return true;
            }
        });
        String _url = "file:android_asset/dist/index.html#/device/index";
        webView.loadUrl(_url);
        setContentView(webView); //调用Activity提供的setContentView将webView显示出来
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值