Javascript WebSocket的错误url方案

Javascript WebSocket的错误url方案,javascript,playframework-2.0,Javascript,Playframework 2.0,我在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['MozWe

我在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>
}
Play找到文件,执行javascript,我可以看到由
警报(“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()
显然没有被一些有用的值替换,而是保持原样。这是因为您的框架似乎认为资产是完全静态的,因此忽略了正常模板中的占位符/变量中的任何东西。 解决问题的一个可能解决方案是将URL保留在模板中,例如,将
data ws=“@….”
添加到
标记中,然后使用JavaScript提取该属性:

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

我使用了以下方法:


谢谢。

您真的打算支持Firefox 6和7吗?这些已经过时很久了,不是扩展的支持版本。我想说的是。。。你很可能摆脱了
MozWebSocket
部分。我是一个网络迷,只是从网络上的一个例子中复制了这个。所以我猜你的问题的答案是“不是真的,不是”;)我不确定“全静态”部分,因为
用户名
也是一个占位符/变量,我确实可以从javascript打印它。它不在资产文件夹的文件中,是吗?用户名是模板的变量,我可以从javascript访问它,当然可以从资产文件夹或直接访问。这就是你要问的吗?我刚刚注意到我的目标是一个id为“userName”的html跨度,而不是传递到模板中的userName变量。我的解决方案如下:模板代码
jscode
var socket=newws($('#user').data('WS'))
var socket = new WebSocket(document.body.getAttribute('data-ws'))
  ws=new WebSocket("ws://localhost:8080/websocket/wsserver");