验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

安卓webview如何处理页面跳转

阅读:744 来源:乙速云 作者:代码code

安卓webview如何处理页面跳转

在安卓应用中使用WebView加载网页时,处理页面跳转可以通过以下几种方式实现:

  1. WebViewClient: 通过设置WebViewClient,你可以拦截WebView中的链接点击事件,并决定是否在WebView中打开链接,或者使用其他方式处理。

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            // 检查URL是否需要特殊处理
            if (request.getUrl().toString().startsWith("http://yourdomain.com")) {
                // 在WebView中加载URL
                return false;
            } else {
                // 使用其他应用打开URL,例如浏览器
                Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                startActivity(intent);
                return true;
            }
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            // 页面加载完成后的操作
        }
    });
    
  2. WebChromeClient: 如果你需要处理JavaScript中的window.location变化或者弹出窗口等,可以通过设置WebChromeClient来实现。

    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            // 处理来自JavaScript的控制台消息
            Log.d("WebView", consoleMessage.message() + " -- From line "
                    + consoleMessage.lineNumber() + " of "
                    + consoleMessage.sourceID());
            return super.onConsoleMessage(consoleMessage);
        }
    
        // 其他WebChromeClient方法...
    });
    
  3. 加载HTML内容: 如果你不需要从网络加载页面,而是直接在WebView中显示HTML内容,可以使用loadDataWithBaseURL方法。

    String htmlData = "

    Hello, World!

    "
    ; webView.loadDataWithBaseURL(null, htmlData, "text/html", "UTF-8", null);
  4. 处理POST请求: 如果你需要处理表单提交等POST请求,可以通过shouldInterceptRequest方法来拦截并处理。

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            // 拦截请求并返回自定义的响应
            try {
                URL url = new URL(request.getUrl().toString());
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
                // 设置请求体等...
                InputStream inputStream = connection.getInputStream();
                return new WebResourceResponse("text/html", "UTF-8", inputStream);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return super.shouldInterceptRequest(view, request);
        }
    });
    

请注意,从Android 10(API级别29)开始,shouldOverrideUrlLoading方法的参数类型已经从String变为了WebResourceRequest。因此,如果你需要支持较新的Android版本,请确保使用正确的方法签名。

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>