除JS之外,<script type =“ mime” src =“ ...”>是否有任何有用的mime?

时间:2019-08-05 01:01:27

标签: javascript mime-types script-tag dynamic-script-loading

通过大量阅读,我得出结论:

<script>标签可以存储数据,但是只有在不使用src的情况下才可以访问。

我想使用src,因为它是脚本加载器的工作方式。 那么type属性和每个mime类型都没有用吗?...

我发现.innerText.innerHTML.toString无法访问“文本/ javascript”(与“应用程序/ javascript”相同)(希望我在这里错过了一些内容) )。 但是它可以执行,这是没有浏览器扩展的外部<script>可以完成的唯一一件事-我想。因为使用了src,所以无法访问数据吗?

我希望我错了,因为我想扩展脚本加载器以加载可能读取的mime类型。有没有?请告诉我任何/某些可访问的mime类型以从外部动态加载。


更新- 谢谢您的回答-现在我得出结论:

根据whatwg.org<script type src>模式对除Javascript以外的任何mime类型均无用:

  

将该属性设置为任何其他值意味着该脚本是一个   数据块,未处理。没有脚本属性   (类型本身除外)对数据块有任何影响。

因此,将type设置为Javascript以外的任何其他值都会使src无效,并且<script>成为数据块没什么用,因为将变量作为唯一将数据放入其中的方法应该更好地将数据存储到div中。

typesrc永远不会在script中一起工作(这会带来安全风险),因为importfetch已经是新的加载文件的方式。在没有CORS的情况下无法在服务器上加载E6导入的地方,仍可以使用脚本加载器。

1 个答案:

答案 0 :(得分:2)

除非您有一个.json文件,并且服务器在响应头中发送适当的MIME类型,否则不特别。否则,<script>标记的内容将不会被处理。

根据WHATWG specification

  

type属性允许自定义表示的脚本类型:

     
      
  • 省略该属性,将其设置为空字符串或将其设置为JavaScript MIME类型本质匹配,表示该脚本是经典脚本,将根据JavaScript Script顶级产品进行解释。经典脚本受asyncdefer属性的影响,但仅当设置了src属性时才受影响。作者应该省略type属性,而不是多余的设置。

  •   
  • 将属性设置为字符串“ module”的ASCII大小写不敏感匹配,表示该脚本是模块脚本。如果它具有JavaScript MIME类型,或者脚本是嵌入式嵌入的,那​​么根据JavaScript模块顶级产品,它将被解释为JavaScript模块脚本;否则,它将被解释为JavaScript模块脚本。如果它具有JSON MIME类型,则它将被解释为JSON模块脚本。模块脚本不受defer属性的影响,但受async属性的影响(与src属性的状态无关)。

  •   
  • 将该属性设置为任何其他值意味着该脚本是未处理的数据块。 script属性(type本身除外)对数据块没有任何影响。作者必须使用不是JavaScript MIME类型本质匹配项的有效MIME类型字符串来表示数据块。

  •   

JavaScript MIME定义为以下任意一项:

  • application/ecmascript
  • application/javascript
  • application/x-ecmascript
  • application/x-javascript
  • text/ecmascript
  • text/javascript
  • text/javascript1.0
  • text/javascript1.1
  • text/javascript1.2
  • text/javascript1.3
  • text/javascript1.4
  • text/javascript1.5
  • text/jscript
  • text/livescript
  • text/x-ecmascript
  • text/x-javascript

JSON MIME被定义为

  

任何子类型以“ +json”结尾或本质为“ application/json”或“ text/json”的MIME类型。

请务必注意,您必须使用有效的MIME类型,以确保浏览器永远不会尝试对其进行处理。否则,将来对该规范的添加可能会破坏您的代码:

  

已规定必须使用有效的MIME类型字符串表示数据块,以避免将来可能发生的冲突。如果此规范添加了其他类型的脚本,则可以通过将type属性设置为非MIME类型的属性来触发它们,例如“ module”值表示模块脚本的方式。现在,通过使用有效的MIME类型字符串,可以确保即使在将来的用户代理中,也不会将数据块重新解释为其他脚本类型。

WHATWG here定义了有效的MIME类型。