我使用nodeJS / express作为后端,使用jade作为模板引擎。我的Javascript部分需要服务器中的一些变量。通常,这可以这样做:
script(type='text/javascript').
var user = !{JSON.stringify(userObject)};
除了userObject
有<script>[some text]</script>
阻止的情况外,一切正常。请不要问为什么这个区块出现在userObject
中,因为这是内部事情,我只是想处理这种情况。
由于Javascript解析器比HTML解析器更早执行,因此我的嵌入会因错误而被破坏:
<script>
var user = {
name: 'Erik',
about: '<script>about me</script>'
};
</script>
未捕获的SyntaxError:无效或意外的令牌
错误发生在about me</script>
行,因为它会关闭主<script>
代码。
所以我的问题是:处理此错误的正确方法是什么?
答案 0 :(得分:0)
如果您不想添加端点并为数据执行GET请求,则还有两个原始解决方案。请注意,这些是kludgey hacks。我仍然认为解决此问题的最佳方法是向API端点发出AJAX请求,并在<script>
标记内包含所需数据。
1)具有剥离<
和>
字符的功能,并在之前和之后应用它们。
E.g。在Express端点:
function replaceTags(aboutSection) {
aboutSection = aboutSection.replace(/</g, '%StartBracket%');
aboutSection = aboutSection.replace(/>/g, '%CloseBracket%');
return aboutSection;
}
在客户端代码中:
function undoReplace(aboutSection) {
aboutSection = aboutSection.replace(/%StartBracket%/g, '<');
aboutSection = aboutSection.replace(/%CloseBracket%/g, '>');
return aboutSection;
}
我正在使用带有g
标记的正则表达式来确保替换所有内容,而不仅仅是第一个实例。
2)如果您不需要about部分,可以在将其传递给端点之前将其删除。