gpt4 book ai didi

javascript - WebSocket 的错误 url 方案

转载 作者:搜寻专家 更新时间:2023-11-01 05:01:45 25 4
gpt4 key购买 nike

我在 play 2.1 中有一个 websockets 程序,它工作得很好,模板如下所示:

// Contents of the view.scala.html file
@(userName: String)(implicit request: RequestHeader)

@main("text") {
<script type="text/javascript" charset="utf-8">
$(function() {
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket;
alert("before")
var socket = new WS("@routes.Application.view(userName).webSocketURL()");
alert("after")
socket.onmessage = function(event) {
alert(event.data);
};
});
</script>
}

问题是,一旦我将我的 javascript 移动到 assets.javascripts 文件夹并将 view.scala.html 文件更改为以下内容,它就会停止工作。

// Contents of the view.scala.html file
@(userName: String)(implicit request: RequestHeader)

@main("text") {
<script type="text/javascript" charset="utf-8"
src="@routes.Assets.at("javascripts/viewer.min.js")"></script>
}

Play 找到文件,执行 javascript,我可以看到由 alert("before") 代码行触发的弹出窗口,但在那之后......什么都没有。

这是我在控制台中得到的 google chrome 错误:

Wrong url scheme for WebSocket
http://localhost:9000/@routes.Application.view(userName).webSocketURL()

我错过了什么?

最佳答案

WebSocket 需要 ws://wss:// (对于 SSL)而不是 http:// .

但是,您的代码中的问题是语句 @routes.Application.view(userName).webSocketURL()显然没有被一些有用的值(value)所取代,而是保持原样。这是因为您的框架似乎将 Assets 视为完全静态的,因此忽略了其中任何在普通模板中将作为占位符/变量的内容。

您的问题的一个可能解决方案是将 URL 保留在您的模板中,例如通过添加 data-ws="@....."给你的<body>标记,然后使用 JavaScript 提取该属性:

var socket = new WebSocket(document.body.getAttribute('data-ws'))

关于javascript - WebSocket 的错误 url 方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com