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

JavaScript脚本仅在index.html生效,子页面Supabase数据获取报错

问题排查与解决办法

1. 修正script.js的import位置

报错“import declarations may only appear at top level of a module”,说明你的script.js里存在import语句未放在文件最顶层的情况——比如把import塞到函数内部、条件判断里,或者在import前写了console.log、变量声明之类的代码。

直接调整:把所有import语句移到script.js的最开头,确保前面没有任何代码。示例:

// 必须将import放在文件最顶层
import { supa } from '/00_setup/supabase.js';

// 其他代码全部放在import之后
document.addEventListener('DOMContentLoaded', async () => {
  console.log('DOM加载完成');
  await getUsername();
});

async function getUsername() {
  // 你的查询逻辑
}

2. 替换脚本路径为根目录绝对路径

子页面在views文件夹下,虽然引入script.js的../script.js路径正确,但script.js里导入supa的相对路径可能适配不了子页面层级。比如原路径是./00_setup/supabase.js,子页面加载时会去views/00_setup/找文件,必然找不到。

改成根目录绝对路径即可解决:

import { supa } from '/00_setup/supabase.js';

不管是首页还是子页面,都会从网站根目录加载supabase.js,不会出现路径错误。

3. 检查子页面的目标DOM元素

首页能输出异步函数日志,子页面只有加载日志,大概率是子页面里没有你要更新的h1标签,或者标签id不匹配,导致getUsername函数执行到更新元素步骤时找不到节点,没触发后续日志。

先确认子页面HTML里存在对应元素,比如<h1 id="username"></h1>,然后在函数里增加元素存在性判断:

async function getUsername() {
  const { data, error } = await supa.from('users').select('username').eq('userId', '你的用户ID');
  if (error) {
    console.error('查询失败:', error);
    return;
  }
  const usernameEl = document.getElementById('username');
  if (usernameEl) {
    usernameEl.innerHTML = data[0].username;
    console.log('用户名更新成功');
  } else {
    console.warn('找不到显示用户名的元素');
  }
}

4. 清除浏览器缓存,避免旧脚本干扰

浏览器会缓存模块脚本,可能子页面加载的是旧版本的script.js,导致修改未生效。解决方式:

  • 打开浏览器控制台的Network选项卡,勾选“禁用缓存”后刷新子页面
  • 或者给脚本添加版本参数,比如<script src="../script.js?v=2" type="module"></script>

内容的提问来源于stack exchange,提问作者y-neck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:16:13