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

如何将现有站点打包为APP?WebView内点击发送验证码无响应如何解决?

修复步骤

1. 补充缺失的WebView核心配置

你当前只开启了JavaScript权限,大部分现代站点依赖的其他权限没有开启,需要在WebSettings配置块补充以下代码:

// 开启DOM存储,站点的前端临时数据(比如会话状态、提交缓存)依赖该配置
webSettings.setDomStorageEnabled(true);
// 允许混合内容,避免HTTPS站点内加载HTTP资源时被默认拦截
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
// 允许JS弹出窗口,部分站点发送验证码前的确认提示需要该配置
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 补充WebChromeClient配置,处理前端交互逻辑
myWebView.setWebChromeClient(new WebChromeClient());

2. 检查自定义WebViewClient逻辑

你代码中重复设置了两次WebViewClient,最终生效的是TutorialWebViewClient,请检查该类中重写的shouldOverrideUrlLoading方法:

  • 不要拦截站点的POST请求,发送验证码的提交行为一般是POST请求,被拦截后就会无响应
  • 不要在重写该方法时默认返回true,返回true代表你已经处理了该请求,WebView不会继续加载

3. 检查AndroidManifest权限配置

确保你已经在Manifest文件中添加了必要配置:

<!-- 基础网络权限,必须添加 -->
<uses-permission android:name="android.permission.INTERNET" />

<application
    ...
    <!-- Android 9及以上允许明文流量,避免站点HTTP请求被拦截 -->
    android:usesCleartextTraffic="true"
    ...>

修复后完整参考代码

public class MainActivity extends ActionBarActivity {

    private WebView myWebView;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myWebView = (WebView) findViewById(R.id.activity_main_webview);
        WebSettings webSettings = myWebView.getSettings();
        // 原有JS权限配置
        webSettings.setJavaScriptEnabled(true);
        // 补充配置开始
        webSettings.setDomStorageEnabled(true);
        webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        myWebView.setWebChromeClient(new WebChromeClient());
        // 补充配置结束
        myWebView.loadUrl("https://app.my30t.ir/login");
        // 删除重复的WebViewClient配置,只保留自定义的即可
        myWebView.setWebViewClient(new TutorialWebViewClient());
        editText = (EditText) findViewById(R.id.editText);
        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    boolean handled = false;
                    if(actionId == EditorInfo.IME_ACTION_SEND) {
                        myWebView.loadUrl(editText.getText().toString());
                        handled = true;
                    }
                    return handled;
                }
            });
    }
}

排查小技巧

如果修改后还是异常,可以开启WebView调试模式,在Chrome浏览器输入chrome://inspect连接设备查看前端控制台报错,定位具体问题:

// 开启WebView调试,仅测试环境开启
WebView.setWebContentsDebuggingEnabled(true);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:04