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

Transcrypt生成JS嵌入HTML报错:import位置错误及缺少{语法问题

让我们一步步拆解你遇到的问题,以及对应的修复方案:

先看你遇到的两个核心错误

1. Uncaught SyntaxError: import declarations may only appear at top level of a module

Transcrypt默认生成的是ES模块格式的JavaScript文件,里面包含import语句来引入它的运行时依赖(比如org.transcrypt.__runtime__.js)。但普通的<script>标签默认会把文件当作传统脚本执行,不支持ES模块的import语法,所以浏览器直接抛出了这个错误。

2. Uncaught SyntaxError: missing { before try block

你的HTML里写了onload=try.greet(),但try是JavaScript的保留关键字(就是用来写try/catch异常处理的那个)。浏览器会把它当成try语句的开头,而不是你的模块名,自然会报错说缺少{。


完整修复方案

第一步:避开JavaScript关键字,重命名Python文件

把你的try.py改成hello.py(名字随便取,只要不是JS关键字就行),代码可以原样保留(顺便帮你修正了两个拼写小错误):

def greet():
    name = document.getElementById("Name").value
    if name == "" or name.length == 0 or name == null:
        document.getElementById("groet").innerHTML = '<p><font color="#ff0000">Hello Anonymous, may I know your name? Please insert it below:</font></p>'
    else:
        document.getElementById("groet").innerHTML = '<p><font color="#00ff00">Hello, '+name+', thank you for introducing yourself</font></p>'

第二步:重新生成JS文件

执行Transcrypt命令,生成新的模块文件:

python3 -m transcrypt -b hello.py

这会在__target__文件夹下生成hello.js和对应的运行时文件。

第三步:修正HTML文件

主要做三个调整:

  • 引入JS模块时必须加上type="module"属性
  • 放弃内联的onload/onclick写法,改用更规范的事件绑定方式
  • 通过ES模块导入的方式调用greet函数

修正后的HTML代码:

<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script type="module">
        // 从Transcrypt生成的模块中导入greet函数
        import { greet } from "./__target__/hello.js";
        
        // 页面加载完成后自动执行一次问候
        window.addEventListener('load', greet);
        
        // 给按钮绑定点击事件
        document.getElementById("greetButton").addEventListener('click', greet);
    </script>
</head>
<title>Insert Text</title>
<body>
    <h2>Hello Demo Name</h2>
    <p>
        <div id="groet">...</div>
    </p>
    <p>Your Name: <input name="name" type="text" maxlength="80" id="Name" value="" /> [Please enter your name]<br><br>
        <button id="greetButton">Refresh the greeting!</button>
    </p>
</body>
</html>

额外小提示

为啥不用内联的onclick?这种写法不仅容易踩关键字的坑,还会把HTML和JS逻辑混在一起,后期维护起来很麻烦,用addEventListener的方式会更清晰、更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:00:20