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

本地WebView从JSON提取内容的JS实现及报错排查咨询

本地WebView读取JSON文件的问题解决

错误原因拆解

  • require is not defined:浏览器/WebView属于前端环境,不支持Node.js的require和fs模块——这些是Node.js后端专属的文件操作API,前端环境里根本不存在。
  • CORS错误+onLoad is not defined:给script标签加type="module"后,脚本会变成ES模块,模块内的函数默认不会挂载到全局作用域,所以HTML里的onload="onLoad()"找不到对应的函数;同时本地file://协议下,浏览器会限制模块加载,触发跨域拦截。
  • ReadFileSync is not defined:ReadFileSync是Node.jsfs模块的方法,前端环境没有这个API,而且原代码里的写法也错了,正确的Node.js写法是fs.readFileSync(小写开头)。

可行解决方案

方案1:用Fetch API读取本地JSON

如果你的WebView允许file://协议发起请求,可以用浏览器原生的Fetch API读取JSON文件,替代Node.js的fs模块:

修正后的HTML:

<html>
   <body scroll="no">
   </body>
   <script src="main.js"></script>
</html>

对应的main.js代码:

const JSON_FILE = "data.json";

// 异步读取JSON文件
async function loadData() {
    try {
        // 发起请求获取JSON文件
        const response = await fetch(JSON_FILE);
        if (!response.ok) {
            throw new Error(`请求失败,状态码:${response.status}`);
        }
        // 解析JSON数据
        const allStrings = await response.json();
        
        // 这里可以自定义数据展示逻辑,示例是把数据格式化显示在页面上
        console.log("读取到的JSON数据:", allStrings);
        document.body.innerHTML = `<pre>${JSON.stringify(allStrings, null, 2)}</pre>`;
    } catch (err) {
        console.error("读取文件出错:", err);
        document.body.innerHTML = `<p>数据读取失败:${err.message}</p>`;
    }
}

// 页面加载完成后自动执行读取逻辑
window.addEventListener('load', loadData);

方案2:直接嵌入JSON数据(适用于静态数据)

如果JSON内容不需要动态更新,直接把JSON内容写进JS文件里,完全避免文件读取操作:

main.js代码:

// 直接把data.json里的内容复制到这里
const allStrings = {
    "示例键1": "示例值1",
    "示例键2": ["子项1", "子项2"]
};

function renderData() {
    console.log("JSON数据:", allStrings);
    // 把数据展示到页面上
    document.body.innerHTML = `<pre>${JSON.stringify(allStrings, null, 2)}</pre>`;
}

// 页面加载完成后渲染数据
window.addEventListener('load', renderData);

方案3:原生App桥接(适用于嵌入原生应用的WebView)

如果你的WebView是嵌入在Android/iOS原生App里,最可靠的方式是让原生代码读取本地JSON文件,再通过JS桥接把数据传递给WebView里的JS代码——这种方式不受浏览器的跨域和API限制。

关键语法修正

原代码里的函数定义有语法错误:

  • 错误写法:function loadData {
  • 正确写法:function loadData() {
    必须加上括号,否则函数无法被正确定义和调用。

内容的提问来源于stack exchange,提问作者Hiep Le Thanh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:37