JavaScript:注册自定义脚本类型并定义处理程序?

时间:2017-05-29 21:27:10

标签: javascript dom

浏览器会忽略具有唯一自定义类型属性的HTML元素。有时这些是模板引擎使用的。如何定义加载/创建此类脚本元素时会发生什么? (在加载页面时或动态插入时) 换句话说,DOM中是否存在某些类型的onCreateElement事件?

当DOM使用例如 querySelector 加载时,我可以很容易地使用属性 type = text / mycustomtype 遍历所有脚本元素,然后使用函数解析它们。但是,当以编程方式创建和附加新脚本元素时,这不起作用。这目前可能吗?

var d = document.createElement('script')
d.setAttribute('type', 'text/mycustomtype')
d.innerHTML = 'define foo = 1;' // some code in some custom language
document.body.appendChild(d)

在这种情况下,不会发生任何事情,因为浏览器将忽略此未知类型。我可以以某种方式为此定义处理函数吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我最近看到在浏览器 using brython 中运行 python 脚本。查看源代码,我看到:

<script type="text/python3">
  from interpreter import Interpreter

  # open REPL in textarea with id "code"
  Interpreter("code")
</script>

我想知道这怎么可能。我在谷歌上搜索了答案,发现了我想要的可怕的 stackoverflow 问题 - 没有答案。

我在Everything I Know About The Script Tag中找到了一个很好的答案。当您说遍历所有脚本元素时,这完全符合您的预测。

他们的例子是这样的:

<script type="text/emerald">
  make a social network
    but for cats
</script>

<script>
  var codez = document.querySelectorAll('script[type="text/emerald"]');
  for (var i=0; i < codez.length; i++)
    runEmeraldCode(codez[i].innerHTML);
</script>