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

Android WebView中Autodesk Forge Viewer离线流程运行异常求助

问题:Android 8.0 WebView中运行Forge Viewer报错Cannot read property 'Initializer' of undefined

我按照《Autodesk disconnected Workflow》文档尝试在Android手机上运行Forge Viewer,将GitHub上的forge-disconnected项目作为本地HTTPS服务器运行,并对Server.js文件做了如下修改以配置HTTPS:

const express = require('express');
var https = require('https');
const path = require('path');
const fs = require('fs');

let app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use(require('./routes/auth'));
app.use(require('./routes/data'));

var options = {
    key: fs.readFileSync(path.join(__dirname, 'cert', 'myKey.key')),
    cert: fs.readFileSync(path.join(__dirname, 'cert', 'myCer.cer'))
};
https.createServer(options,app).listen(1880);

在Android应用的Chrome WebView中访问该服务器URL时,出现以下错误:

[chromium] [INFO:CONSOLE(20)] "Uncaught TypeError: Cannot read property 'Initializer' of undefined", source: https://example.com:1880/javascript/main.js (20)

但该服务在本地电脑浏览器(HTTPS方式)中可正常运行。我的Android设备系统版本为8.0.0,请问该错误的原因是什么?


原因分析与解决方案

核心原因

这个错误本质是Forge Viewer的核心脚本未被正确加载,导致Initializer对象不存在,根源在于Android 8.0 WebView的环境限制:

  1. TLS版本兼容性问题
    Android 8.0(API 26)默认仅支持TLS 1.0/1.1,而你的HTTPS服务器可能配置了更高版本的TLS(如TLS 1.2+)。当WebView尝试加载Viewer相关资源时,TLS版本不匹配会导致请求失败,核心脚本加载中断,最终触发Initializer未定义的错误。电脑浏览器普遍支持高版本TLS,所以能正常运行。

  2. 自签名证书信任问题
    你使用的是自签名证书,Android 8.0的WebView默认不会信任这类非CA颁发的证书。WebView请求资源时会因证书验证失败而终止加载,进而引发脚本错误。

  3. WebView必要设置缺失
    Android WebView默认可能禁用了Dom存储、JavaScript高级特性等Forge Viewer依赖的功能,也会间接导致加载失败。

解决方案

  1. 强制WebView支持TLS 1.2+
    在Android代码中为WebView配置TLS 1.2支持,示例代码:
import android.os.Build;
import android.webkit.SslError;
import android.webkit.SslErrorHandler;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import javax.net.ssl.SSLContext;

// 初始化WebView时添加配置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    WebSettings webSettings = webView.getSettings();
    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
    
    try {
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            // 仅测试环境使用,生产环境请勿忽略证书错误
            handler.proceed();
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
            // 可在此记录资源加载失败日志
        }
    });
}
  1. 处理自签名证书
  • 测试环境:通过上述onReceivedSslError方法中的handler.proceed()跳过证书验证(注意:生产环境禁止此操作,会引发安全风险)。
  • 生产环境:将自签名证书导入Android系统信任库,或更换为受公共CA颁发的合法证书。
  1. 配置WebView必要权限
    确保WebView启用Forge Viewer依赖的核心功能:
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
  1. 验证资源加载状态
    开启WebView调试模式,查看Network面板确认所有Viewer相关脚本(如viewer3D.min.js)是否成功加载,根据具体加载失败信息进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:50:28