<script> 中 type 用 text/ecmascript 与 text/javascript 有什么区别?


今天看到一段关于 SVG 实现拖拽的代码:


 <script type="text/ecmascript"> <![CDATA[  
  var selectedElement = 0;  
  var currentX = 0;  
  var currentY = 0;  
  var currentMatrix = 0;  

  function selectElement(evt) {  
    selectedElement = evt.target;  
    currentX = evt.clientX;  
    currentY = evt.clientY;  
    currentMatrix = selectedElement.getAttributeNS(null, "transform").slice(7,-1).split(' ');  

      for(var i=0; i<currentMatrix.length; i++) {  
        currentMatrix[i] = parseFloat(currentMatrix[i]);  
      }  

    selectedElement.setAttributeNS(null, "onmousemove", "moveElement(evt)");  
  }  
]]> </script>

请问这里的 type 与平时我们使用的 text/javascript 有什么区别?
还有,里面为什么要加 <![CDATA[ ]]>

这段代码能不能直接换成这样?


 <script type="text/javascript">
  var selectedElement = 0;  
  var currentX = 0;  
  var currentY = 0;  
  var currentMatrix = 0;  

  function selectElement(evt) {  
    selectedElement = evt.target;  
    currentX = evt.clientX;  
    currentY = evt.clientY;  
    currentMatrix = selectedElement.getAttributeNS(null, "transform").slice(7,-1).split(' ');  

      for(var i=0; i<currentMatrix.length; i++) {  
        currentMatrix[i] = parseFloat(currentMatrix[i]);  
      }  

    selectedElement.setAttributeNS(null, "onmousemove", "moveElement(evt)");  
  }  
</script>

svg ecmascript JavaScript

chiseen 10 years, 2 months ago

同意楼上 为了兼容老版本的浏览器不支持javascript脚本

光明分局赵东来 answered 10 years, 2 months ago

是为了兼容老版本的浏览器不支持javascript脚本

shade90 answered 10 years, 2 months ago

首先, text/ecmascript text/javascript 这两个媒体类型是等价的,你完全可以省略不写,直接 <script></script>

其次,你可以将你代码中的 <![CDATA[ ]]> 去掉,一般不会出现问题。

下面,简单的介绍一下为什么要使用 <![CDATA[ ]]>

首先, CDATA 这东西是XML中特有的,它里面的内容不会被XML解析器解析,你可以把它理解为 元数据

但是,HTML中怎么会有 CDATA 了呢?

原因是:在HTML 4.01出来之后,人们又创造出来了一个XHTML,目的是为了语法更严谨,可扩展等等。XHTML的媒体类型是 application/xhtml+xml ,而HTML的媒体类型为 text/html 。但实际情况是,绝大多是都是用 text/html 这个媒体类型。如果媒体类型是 application/xhtml+xml 的话,当标签中出现 > & 等字符(这在JS中很常见)是会导致解析出错。为了兼容,我们就将它放在CDATA中,这样解析器就不会解析他了,但是,这样在HTML中就会出错了,于是便有了下面的写法:


 

<script type="text/javascript"> // <![CDATA[ // ]]> </script>

这也是为了兼容HTML和XHTML。具体解释可以参见参考链接3。好消息是,现在的浏览器大都兼容XHTML和HTML。

感觉XHTML的雄心很大,但是壮志未酬,一统江湖的大任最终落在了HTML5的身上。

参考

  1. HTML Versus XHTML
  2. HTML and XHTML
  3. Why does CDATA is commented out under script tags ?
  4. Writing JavaScript for XHTML
yamada answered 10 years, 2 months ago

Your Answer