You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView无法执行JavaScript 桌面/移动浏览器可正常加载

Android WebView 内JavaScript无法执行修复方案

现有代码存在3个直接导致JS运行失败的问题:

  1. 配置顺序错误:先调用loadUrl()触发页面加载,之后才开启JavaScript权限,页面初始加载阶段JS处于禁用状态,首屏注入的JS逻辑会被直接拦截
  2. 自定义WebViewClient未生效:代码中给WebView绑定的是默认空实现的WebViewClient,自行实现的mywebClient类未实例化绑定,URL跳转逻辑不生效
  3. 缺少动态网页必需的运行配置:仅开启setJavaScriptEnabled(true)不足以支撑绝大多数现代站点运行,DOM存储、JS弹窗权限、混合内容加载等配置默认处于关闭状态,会导致JS运行时报错中断

修复步骤

  • 调整代码执行顺序:所有WebSettings配置、WebViewClient绑定操作,必须放在loadUrl()调用之前完成
  • 补全必需的WebSettings配置项
  • 绑定自定义的WebViewClient实现,替换默认空实例

修复后完整代码

package com.example.eduquiz;

import androidx.appcompat.app.AppCompatActivity; 
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.CookieManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView mywebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mywebView=(WebView) findViewById(R.id.webview);
        
        // 所有配置必须在loadUrl之前完成
        WebSettings webSettings=mywebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        // 补全缺失的必要配置
        webSettings.setDomStorageEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setAllowContentAccess(true);
        webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        // 开启第三方Cookie支持,适配站点登录/状态留存逻辑
        CookieManager.getInstance().setAcceptThirdPartyCookies(mywebView, true);

        // 绑定自定义的WebViewClient,不要用默认空实现
        mywebView.setWebViewClient(new mywebClient());
        // 所有配置完成后再加载目标地址
        mywebView.loadUrl("https://eduquizitmda.000webhostapp.com/");
        
    }

    public class mywebClient extends WebViewClient{
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon){
            super.onPageStarted(view,url,favicon);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view,String url){
            view.loadUrl(url);
            return true;
        }
    }
    @Override
    public void onBackPressed(){
        if(mywebView.canGoBack()) {
            mywebView.goBack();
        }
        else{
            super.onBackPressed();
        }
    }

}

若补全配置后仍存在JS执行异常,可通过实现WebChromeClient重写onConsoleMessage方法,打印页面JS的控制台报错日志,直接定位异常点做针对性兼容。

内容的提问来源于stack exchange,提问作者Dewald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:01:06