我有 3 个页面:index.hml、admin.html 和 host.html。我在脚本标签内的页面上有 javascript。我想将所有 javascript 移动到一个文件中,并在每个页面上都可用。
我试过从我的 html 页面链接到 JS 文件,例如:
<script src="static/app.js" type= "text/javascript"></script>
但我一直收到错误:
Uncaught SyntaxError: Unexpected token <
我试过使用这个 src 路径,包括将 app.js 文件移动到与 html 文件相同的级别,并将 src 更改为“app.js”,但仍然给出相同的错误消息。
这让我认为这是由于服务器呈现文件的方式(使用 ServeMux)所致。
我的代码是:
func requestHandler(tpl *template.Template) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
tpl.Execute(w, r)
})
}
func main() {
flag.Parse()
user := template.Must(template.ParseFiles("index.html"))
admin := template.Must(template.ParseFiles("admin.html"))
host := template.Must(template.ParseFiles("host.html"))
router := http.NewServeMux()
router.Handle("/", requestHandler(user))
router.Handle("/admin", requestHandler(admin))
router.Handle("/host", requestHandler(host))
log.Fatal(http.ListenAndServe(":8081", router))
}
我搜索了 SO 并尝试了很多事情,包括:
http.Handle("/js", http.FileServer(http.Dir("static/")))
在 static/app.js 中有一个 javascript 文件,但这只是呈现我的索引页面,没有加载 JS。我似乎无法将 JS 文件加载到页面中。
我也尝试过读取 JS 文件,更改内容类型并将 JS 文件写入编写器,如下所示:
data, err := ioutil.ReadFile("app.js")
if err != nil {
fmt.Println("error: ", err)
return
}
w.Header().Add("Content Type", "application/javascript")
w.Write(data)
然而,这只是在没有运行 JS 的情况下将所有文本呈现到页面,并且文本没有呈现为 HTML。在我看到的页面上:
alert("loaded");<!DOCTYPE html>
<html>
<head>
<title>Example</title>
index.html header 是:
<!DOCTYPE html>
<html>
<head>
<title>Chat Example</title>
</script>
<script src="static/app.js" type= "text/javascript"></script>
我觉得必须有一种更简单的方法来加载 JS。这是尝试 2,其中包含我尝试过的更多解释、代码和示例。
最佳答案
您必须在 HTML 中引用脚本:
<html>
<head>
<script src="/js/app.js"></script>
...
</head>
<body>...</body>
</html>
另请注意,为了提供整个目录,在 mux 中注册的路径应该有一个尾部斜杠:
http.Handle("/js/", http.FileServer(http.Dir("static/")))
关于javascript - golang 在呈现模板时包含 javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118831/