Highlight.js搭配Marked报错:TypeError: (e || "").toLowerCase不是函数
问题原因及解决方法
问题根源
你调用hljs.highlight时传入了语言对象(通过hljs.getLanguage(lang)获取的结果),但Highlight.js的highlight方法要求language参数是语言名称字符串。内部代码尝试对该参数执行toLowerCase()方法时,因对象没有这个方法而抛出错误。
修正后的代码
将高亮分支的代码修改为直接传入语言名称字符串:
const markedRenderer = new marked.Marked( markedHighlight.markedHighlight({ langPrefix: 'hljs language-', highlight(code, lang) { const trimmedLang = ('' + lang).trim(); if (['nohighlight', 'plaintext'].includes(trimmedLang)) { return code; } else { if (!hljs.getLanguage(trimmedLang)) { return hljs.highlightAuto(code).value; } else { // 直接传入语言名称字符串,而非语言对象 return hljs.highlight(code, { language: trimmedLang, ignoreIllegals: true }).value; } } } }) );
补充说明
hljs.getLanguage(lang)仅用于验证语言是否存在,不需要将返回的对象传递给highlight方法,该方法内部会自行根据语言名称查找对应的定义。- 修改后,指定已知语言(如
c)的代码块将正常触发高亮,自动高亮和纯文本分支的功能不受影响。
内容的提问来源于stack exchange,提问作者igorludi
相关产品推荐
相关产品推荐

