将Socket.IO放在html head标签中

时间:2016-11-18 20:43:37

标签: javascript html node.js socket.io

所以我一直在做socket.IO,我从聊天示例开始。我的聊天服务现在非常复杂,但它基于原始教程。在教程中,他们提出了

import scala.reflect.runtime.universe._

sealed abstract class Codes(val list: List[String])
object UVWCodes extends Codes(List("U", "V", "W"))
object XYZCodes extends Codes(List("X", "Y", "Z"))


object FindObjectsByReflection {
  def main(args: Array[String]) = {
    val c = typeOf[Codes].typeSymbol.asClass.knownDirectSubclasses
    c.foreach { x =>
      val d = getObjectInstance(x.fullName).asInstanceOf[Codes]
      println(d.list)
    }
  }
  def getObjectInstance(clsName: String): AnyRef = {
    val mirror = runtimeMirror(getClass.getClassLoader)
    val module = mirror.staticModule(clsName)
    mirror.reflectModule(module).instance.asInstanceOf[AnyRef]
  }

}

在body标签的末尾。出于组织原因,我想将脚本标记放在头部,但是当我这样做时,我的代码不再有效。我很好奇为什么会发生这种情况,即使没有可能的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以在HTML中的任何位置放置<script>标记(在合理范围内)。将<script>标记放在<head>中可能遇到的唯一问题是它们会先加载。 HTML的工作方式是它按顺序遍历代码,这意味着如果你尝试在你的代码中引用代码中的HTML代码并且你的JavaScript首先出现,你会得到一个错误,它无法找到你的元素引用。

为了避免这种情况,JS经常被放在最后。如果由于某种原因你需要<head>中的JS,你有两个选择:

  • 将代码放在按钮内。这是有效的,因为文档将加载所有内容,然后仅在按下按钮时运行引用HTML的JavaScript。
  • 如果您不希望用户必须按下按钮,或者某个按钮因其他原因无效,您可以使用<body onload="script();">等内置功能。此示例仅在正文加载后才运行script()内的代码。如果这不起作用,您可以使用其他类似的功能,例如document.onload = function ...或jQuery&#39; $( document ).ready()

希望这有帮助!