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

WebView中WebSocket连接失败,返回错误码1006求助

WebView中WebSocket连接失败返回错误码1006的问题

我在HTML页面中实现了一个简单的WebSocket,在所有浏览器中都能正常连接运行,但加载到Android App的WebView中时,连接失败并返回错误码1006。由于连接的是不同的URL/端点,我怀疑这是CORS问题。应用最低兼容API 23。

相关代码

HTML页面代码

<!DOCTYPE html>
<html>
<body>
<h1>Socket Connect</h1>
<div id="container"></div>
</body>
<script>
    const div = document.getElementById('container');

    try {
        console.log('connect');
        var ws = new WebSocket('wss://anotherserver.com:3000');
        ws.binaryType = 'arraybuffer';
    }
    catch (err) {

    }
    ws.onerror = function (error) {
        // 错误信息始终为空
        console.log('error');
    };
    ws.onopen = function () {
        div.textContent = 'Opened';
        console.log('opened');
    };
     ws.onclose = function (error) {
        // 始终返回1006
        div.textContent = error.code;
        console.log(error.code);
    };
    
    </script>

</html> 

已配置的WebView设置

我查阅相关内容后已配置以下代码:

myWebView.getSettings().setAppCacheEnabled(true);
    myWebView.getSettings().setDatabaseEnabled(true);
    myWebView.getSettings().setDomStorageEnabled(true);
    myWebView.getSettings().setCacheMode(currentCacheMode); /* 若缓存未过期则使用缓存 */
    myWebView.getSettings().setJavaScriptEnabled(true);

同时也在Manifest中配置了cleartext支持。

解决方法

1. 配置WebView跨域与混合内容支持

API 23+的WebView对跨域和混合内容有严格限制,添加以下配置:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // 允许混合内容加载,适配WSS跨域场景
    myWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
// 允许跨域资源访问
myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
myWebView.getSettings().setAllowFileAccess(true);

2. 自定义WebViewClient避免拦截请求

确保WebViewClient不会拦截WebSocket连接请求:

myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        // 不拦截任何URL加载,包括WebSocket连接
        return false;
    }
});

3. 排查SSL证书问题(针对WSS)

错误码1006常和SSL证书验证失败有关,测试环境下可临时忽略证书错误(上线前必须修复证书问题):

myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        // 仅测试用,上线请删除此代码,改用信任的证书
        handler.proceed();
    }
});

4. 开启WebView调试定位问题

开启WebView调试后,用Chrome工具查看详细错误日志:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
}

打开Chrome浏览器输入chrome://inspect,连接设备后查看WebView的Console日志,获取更具体的错误原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:01:33