2017-10-11 25 views
0

在我将连接“url”变量和脚本元素src属性的chrome中出现“Uncaught SyntaxError:Invalid or unexpected token”错误。在控制台中,错误从第二个连接运算符开始,并转到下一行中关闭脚本标记的末尾。当连接变量和HTML脚本元素src属性时出现“Uncaught SyntaxError:Invalid or unexpected token”

var script = '<script src='+url+'></script>'

脚本变量是一个回调函数,我基于点击的按钮很动态地设置脚本元素的src网址中定义。在触发回调的事件触发之前,页面加载时发生错误。所以当错误发生时,函数没有被调用,“url”包含未定义的变量。

function update(){ 
    var clicked = $(this).attr("id"); 
    var parameters = getParameters(clicked); 
    var defaultField = parameters[0]; 
    var defaultUnits = parameters[1]; 
    var url= '"https://....jsembed=true&timeControl=true&fieldControl=true&defaultField='+defaultField+'&defaultUnits='+defaultUnits+'"'; 
    var script = '<script src='+url+'></script>'; 
    var container = document.getElementById("container") 
    container.innerHTML=script; 
}; 

回答

1

问题是,当浏览器看到</script>它将它解释为脚本块的结束标记。在这种情况下,这意味着将脚本块终止在使语法无效的字符串中间。
无论它是否在JS字符串中,HTML解析器都具有绝对优先权。

您可以通过更改该行进入这个很容易解决这个问题:

var script = '<script src='+url+'></s'+'cript>'; 
+0

谢谢ou的解释!这解决了这个问题,并且完美地工作,但@darkone使用反斜杠在关闭脚本标记中转义斜线的解决方案也解决了这个问题,他们首先回答了问题。 – Drazah

+0

@Drazah虽然这个问题的解释是不准确的。正斜杠是**不是**字符串中的转义字符。 –

+0

将正斜杠描述为转义字符并不准确。但是,在关闭脚本标记中添加反斜杠以避开正斜杠的解决方案同样解决了问题以及解决方案。 – Drazah

0

尝试这样做:

var script = `<script src=${url}</script>` 

我得到的感觉是字符串的组合和'"可能有一些搞砸了。这是一个模板文字,您可以在字符串中使用变量。但是,您必须使用反引号。

+0

没有工作,现在整个字符串被强调为错误。 – Drazah

0

您的代码实际上有两种解决方案。 一种是像UghThatGuyAgain刚才提到使用模板字符串,使其

var script = `<script src=${url}><\/script>`; 

另一种是你是如何做的。

var script = '<script src='+url+'><\/script>'; 

与您的解决方案的问题是基本/一部分。它基本上是一个转义字符,所以你必须以不同的方式处理它。

+0

在关闭脚本标记中转义斜线解决了它。 – Drazah

+0

我改变了接受的答案。这个解决方案确实解决了这个问题,但@Mikael Lennholm的解决方案也解决了这个问题,并更准确地解决了问题的根源。 – Drazah

+0

没问题,他有很多经验。我也学到了一些新东西。 – thedarkone

相关问题