安卓webview设置h5页面中window.open打开的高度

正常安卓和h5交互的时候,都是打开一个单纯的h5页面,如果该h5页面中,涉及到window.open打开其他链接的时候,有可能就导致不能正常打开了。

安卓代码

创建webview

代码如下:

webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//设置js可以直接打开窗口,如window.open(),默认为false
        webview.getSettings().setSupportMultipleWindows(true);
        webview.getSettings().setJavaScriptEnabled(true);//是否允许执行js,默认为false。设置true时,会提醒可能造成XSS漏洞
        webview.getSettings().setSupportZoom(false);//是否可以缩放,默认true
        webview.getSettings().setBuiltInZoomControls(false);//是否显示缩放按钮,默认false
        webview.getSettings().setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式
        webview.getSettings().setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
// webview.getSettings().setUserAgentString("User-Agent:Android");//设置用户代理,一般不用
        webview.addJavascriptInterface(new DataInteraction(this),
                "JSBridge");
        webview.setWebChromeClient(new MyWebChromeClient(getWindow(), WebViewActivity.this));
        webview.setWebViewClient(myWebViewClient);

关键点:
1、新增MyWebChromeClient的实现
2、setJavaScriptCanOpenWindowsAutomatically

创建MyWebChromeClient

此MyWebChromeClient继承WebChromeClient
实现onCreateWindow方法

@Override
    public boolean onCreateWindow(WebView view, boolean dialog,
                                  boolean userGesture, Message resultMsg) {
        newWebView = new WebView(view.getContext());
        view.addView(newWebView);
        WebSettings settings = newWebView.getSettings();
        settings.setDefaultFontSize(12);
        settings.setJavaScriptEnabled(true);
        //newWebView.setInitialScale(view.getHeight()/3);

        //这个setWebViewClient要加上,否则window.open弹出浏览器打开。
        newWebView.setWebViewClient(new WebViewClient());
        newWebView.setWebChromeClient(this);

ViewGroup.LayoutParams params= newWebView.getLayoutParams();
    Display display = window.getWindowManager().getDefaultDisplay();
    params.height=display.getHeight();
    newWebView.setLayoutParams(params);

        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();
        return true;
    }

一定要加这个
newWebView.setWebViewClient(new WebViewClient());

设置window.open的高度

获取当前view的高度,然后给新的窗口设置高度

ViewGroup.LayoutParams params= newWebView.getLayoutParams();
        Display display = window.getWindowManager().getDefaultDisplay();
        params.height=display.getHeight();
        newWebView.setLayoutParams(params);

未设置高度前

看红色框展示的部分,即用window.open方式打开的页面
在这里插入图片描述

设置高度后

设置完以后就应该是全屏的这样子了
由于没有专门截取,就找了个视频的截图
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐