javascript - HTML 中的新标记和解析器

标签 javascript python html html-parsing

我已经草拟了一种用于客户端脚本的新编程语言。我熟悉如何构建一种语言,以及其中的大部分工作。我准备进行一个长期项目,但对如何将其实现到 HTML 文件中有一些疑问。我想在 HTML 中实现类似 <script> 标签的东西,我找到了一些解释如何向 HTML 添加新标签的链接。我认为开发人员必须使用 HTML 文件头部的语言解析器(它实际上不仅仅是一个解析器,但除此之外)连接到一个 js 文件,如下所示:<script src="my-lang.js"></script> .以下是我找到的一些链接: https://blog.teamtreehouse.com/create-custom-html-elements-2 https://developers.google.com/web/fundamentals/web-components/customelements

这里是我的一些问题,假设我想在 标签之间使用我的语言:

  1. 如何防止浏览器的 HTML 解析器将 标记中的内容误解为 HTML 代码?据我所见,使用我的语言编写的所有代码都会在网站上显示为纯文本。
  2. 如何将我的解析器实现到 JS 文件中?我不是在问如何解析自定义语言,而是在问放在哪里。第一个链接提到了 createdCallback()使用 标签时调用的函数。假设以后没有人使用 JavaScript 添加 标签(对于这种语言来说这毫无意义),只要使用自定义标签,就应该调用回调。
  3. 要解析我的语言,我应该访问自定义标签的 innerHTML 属性吗?我不知道通过解析时间标签是否甚至具有该属性,或者我是否必须添加该属性,因为我不熟悉它的这一部分是如何工作的。

感谢您容忍我的愚蠢问题。我喜欢深入研究这些东西,尽管我对这部分脚本编写还很陌生。基本上,这就是我想要的代码:

<!DOCTYPE html>
<html>
    <head><script src="my-lang.js"></script></head>
    <my-language>
        //do some stuff in my language, like DOM editing. 
        //Just a replacement for JavaScript basically that doesn't serve much purpose.
    </my-language>
</html>

如有任何建议,我们将不胜感激。提前致谢!

最佳答案

与其在 HTML 中使用新的非标准标记,我建议考虑使用 <script>标签。虽然<script>标签经常用于 Javascript,但情况并非总是如此。例如,服务器发送数据供客户端 JS 解析的一种可能技术是将 JSON 放在像 <script type="application/json">{"foo":"bar"}</script> 这样的标记中。 .类型不是 type="javascript" 的脚本不会尝试将其解析为 Javascript,但可以使用 Javascript 检索标记内的数据。您可以通过选择标签然后访问其 textContent 来做到这一点属性(property)。 (innerHTML 属性可能仅在您有意要检索 HTML 标记时才适用 - 否则,最好使用 textContent )

您可以使用几乎相同的技术,但不是 JSON.parse正在处理 <script> 的内容标记,通过您的解析器发送它。

例如:

const tag = document.querySelector('script[type="myNewLanguage"]');
const scriptText = tag.textContent;

// use your parser to parse scriptText
scriptText.split('\n').forEach(line => {
  console.log(line);
});
<script type="myNewLanguage">foo
bar
baz</script>

关于javascript - HTML 中的新标记和解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859329/

相关文章:

html - 我怎样才能让元素随页面移动,因为它调整大小以保持它们相对于背景图像的位置?

JavaScript 整数输入提示验证

javascript - 将 HTML5 视频标签分配给 webGL 纹理时的 CORS/跨域安全异常

python - 为 Caffe2 创建图像 LMDB

python - 由于缺少 CSRF,表单验证失败

python - 如何计算 Pandas 数据框中的重复行?

Javascript 阅读文档和 PDF

html - 如何在不创建空白的情况下使图像吞没窗口大小

javascript - 切换的替代方法

javascript - 声明 JavaScript 常量的最佳方法