Javascript 带有Transcrypt脚本的HTML给出了缺少{before try块的错误

Javascript 带有Transcrypt脚本的HTML给出了缺少{before try块的错误,javascript,python,transcrypt,Javascript,Python,Transcrypt,我正在尝试添加一个javascript文件,该文件是从Python文件通过Transcrypt生成的 然而,当我将该脚本添加到HTML文件时,控制台中出现了一些错误,我失败了 我使用的Python文件:try.py def greet(): name = document.getElementById("Name").value if name == "" or name.length == 0 or name == null:

我正在尝试添加一个javascript文件,该文件是从Python文件通过Transcrypt生成的

然而,当我将该脚本添加到HTML文件时,控制台中出现了一些错误,我失败了

我使用的Python文件:try.py

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 yor name? Please insert it below:</font></p>'
    else:
        document.getElementById("groet").innerHTML = '<p><font color="#00ff00">Hello, '+name+', thank you for introducing you</font></p>'
我希望当我单击按钮或重新加载文件时,应该放置问候语。但是,在控制台中,我遇到两个错误:

Uncaught SyntaxError: import declarations may only appear at top level of a module try.js:1:13
Uncaught SyntaxError: missing { before try block hello.html:1:3
伙计们,有什么问题吗

[编辑] 在T.J的回答之后,我更新了html文件,如下所示:

“严格使用”;导入2.关键错误,未实施的错误,运行时间警告,运行时间警告,停止迭代,停止迭代,用户警告,值错误,值错误,警告,以及运行时间警告,停止迭代,停止迭代,用户警告,属性错误,属性错误,值错误,值错误,警告,属性,属性,属性,属性,属性,属性,属性,属性,属性,基本错误,基本错误,基本错误,基本例外,基本例外,反对,反对,反对,反对者,反对者,声明,断言,断言,断言,断言,断言.断言.断言.断言.断言.断言.断言.断言.断言....断言.........断言,属性,停止迭代......停止.............................用户警告,属性,属性,属性...........用户警告,属性..........................._uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu教育、教育、教育、教育、教育、教育、教育、教育、教育、教育、教育、教育、教育、教育、教育、教育等,
__一些家庭的家庭和家庭的一些家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭的家庭,家庭_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuminal\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
getattr、hasattr、input、int、isinstance、issubclass、len、list、map、max、min、object、ord、pow、print、property、py_TypeError、py_iter、py_metatype、py_next、py_reversed、py_typeof、range、repr、round、set、setattr、sorted、str、sum、sum、tuple、zip}来自“/org.transcrypt.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu运行时_uuuuuuuuuuuuuuuuuuuuu.value;if(py|u name==“py|u name.length==0 | | py|u name==null)document.getElementById(“groet”).innerHTML='你好,匿名,我可以知道你的名字吗?请在下面插入:

'; else document.getElementById(“groet”).innerHTML='你好,+py_name+”,感谢您的介绍

“}; //#sourceMappingURL=hello.map

从“/hello.js”导入{greet};
document.getElementById(“greetButton”).onclick=greet();
插入文本
你好,演示名

...

您的姓名:[请输入您的姓名]

更新问候语!

导入声明只能出现在模块的顶层

非常清楚:您没有将脚本作为模块加载,因此不能使用
import
。将
type=“module”
添加到
script
标记中。(但请确保您的目标浏览器支持模块——所有现代主流浏览器都支持模块,但在没有模块支持之前,您不必返回多个版本。)

缺少{重试前块

你有


try
是JavaScript中的一个关键字,您不能将其用作标识符。您需要为
try
对象使用不同的名称。(我将在本答案的其余部分使用
xtry

如果你的代码真的是一个模块,你也不能将你的
xtry
用作全局,即使它是在代码的顶层声明的,因为模块的顶层作用域不是全局作用域。你需要导入它才能使用它。这也意味着你不需要
try.js的
script
标记,因为
import
将完成此操作。删除
onload
和当前的
脚本
标记,改为:

<script type="module">
import { xtry } from "__target__/try.js";
xtry.greet();
</script>

从“\uuuu target\uuuu/try.js”导入{xtry}”;
xtry.greet();
在完全解析HTML并填充DOM之前(由于
type=“module”
)不会运行



旁注:
onload
属性处理程序通常不是最佳做法,原因有二:1.它们只能使用全局变量;2.
load
事件在页面加载周期的后期发生,等待所有资源(包括所有图像)加载。有时这是您想要的,但不经常。相反,使用现代事件处理(如果您真的需要在
load
上连接处理程序)和现代脚本技术(
type=“module”
延迟
,…)。

除了@T.J.Crowder的答案之外,我还将html中的脚本更改为:

<script type="module">
  import * as hello from "./__target__/hello.js";
  window.hello = hello;
</script>

从“/\uuuuu target\uuuuu/hello.js”导入*作为hello;
window.hello=你好;
如的教程中所述


通过这种方式,我可以在单击按钮时调用Python函数。

谢谢您的回答,但我想我不明白一些事情。首先,“导入”错误来自js文件,但js文件不是由我创建的,而是由Transcrypt自动创建的。其次,如果我没有错,那么使用类似hello.js/hello.py的内容更改try.js/try.py将起作用。但在这种情况下,我得到了一个错误:未捕获引用错误:hello未定义(hello.html:1:1)。此外,“模块”脚本还有另一个错误,“找不到xtry”@stack-“首先,“导入”错误来自js文件,但js文件不是由我创建的,而是由Transcrypt自动创建的。“是的。显然它创建了一个JavaScript模块。您必须这样使用它。”但在这种情况下,我得到了一个错误:未捕获引用错误:未定义hello“我在回答中解释了为什么不能将标识符用作全局标识符。”此外,“模块”脚本还出现另一个错误,“找不到xtry”您的标识符是
hello
,而不是上面的
xtry
xtry
只是一个占位符。当然,我知道我的标识符是hello,我的意思是我在答案中尝试了您的xtry版本,但失败了:)好的,现在我删除了onload部分,忘了它。另外,我还通过导入将脚本添加为模块类型。我如何才能将脚本to按钮的点击?没有
<script type="module">
  import * as hello from "./__target__/hello.js";
  window.hello = hello;
</script>