问题描述
以下作品:
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements['MYHiddenValue'].value+'</html>', 'blah');");
下列:
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements['MYHiddenValue'].value+'</html>', 'document.forms[0].elements['MYHiddenValue'].value');");
要么
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements['MYHiddenValue'].value+'</html>', 'document.forms[0].elements['MYSecondHiddenValue'].value');");`
得到:
[INFO:CONSOLE(1)] "Uncaught SyntaxError: missing ) after argument list", source: (1)
我究竟做错了什么?
1楼
将所有“字符替换为”
(从此处复制/粘贴,因为它们看起来彼此相似)
在下面的OP中添加注释后进行编辑。
第一个失败的命令:
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements['MYHiddenValue'].value+'</html>', 'document.forms[0].elements['MYHiddenValue'].value');");
它具有一对单引号,当行执行并生成字符串时,这将导致语法错误。 它应该产生一对转义的单引号,因此该行应包含一个“转义”反斜杠:
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements['MYHiddenValue'].value+'</html>', 'document.forms[0].elements[\\'MYHiddenValue\\'].value');");
第二种选择是在第一阶段使用双引号并将每个单引号转义,例如:
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements['MYHiddenValue'].value+'</html>', 'document.forms[0].elements[\"MYHiddenValue\"].value');");
第二个命令在“ MYSecondHiddenValue”上也有类似的错误。
第一个命令没有失败的原因是它通过添加三个单独的字符串来构建html字符串,这不会引起引用问题。
但这也使这三个命令彼此不同。 第一命令将document.forms 的值 [0] .elements [ 'MYHiddenValue']和其他两个将字符串 “document.forms [0] ... .elements值”。 因此,如果不知道showHTML()的确切功能,我们将不知道哪个是正确的。
2楼
我相信这是问题所在。 在您的第一个示例中,
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements[’MYHiddenValue’].value+'</html>', 'blah');");
第二个嵌入式参数'blah'没有任何内部引号。 但是,在您的第一个无效示例中,
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements[’MYHiddenValue’].value+'</html>', 'document.forms[0].elements[’MYHiddenValue’].value');");
在应评估的参数部分中有一个嵌入式引号。 以下子字符串(在两个示例中均找到)具有一个字符串(''),该字符串与代码相连接,该代码的结果为与另一个字符串(即结束HTML标记)连接的字符串。
'<html>'+document.forms[0].elements[’MYHiddenValue’].value+'</html>'
在第二个无效示例中,
'document.forms[0].elements[’MYHiddenValue’].value'
您有一个字符串,我认为只需要对其进行评估。 JavaScript将其视为一个字符串,如下所示,但这不是您想要的。
'document.forms[0].elements[’
我相信,如果您在此无效的示例中删除了一对外部的单引号,则它将起作用,因为代码将对其进行评估。 如果只需要它是一个字符串,则需要转义内部的单引号,如
'document.forms[0].elements[\'MYHiddenValue\'].value'
3楼
好吧,现在看您的代码,我可以看到
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements[’MYHiddenValue’].value+'</html>', 'document.forms[0].elements[’MYHiddenValue’].value');");
确实是一个大字符串,(或两个已合并),请尝试将其更改为:
loadUrl("javascript:HtmlViewer.showHTML" + "('<html>'+document.forms[0].elements[’MYHiddenValue’].value+'</html>'", "'document.forms[0].elements[’MYHiddenValue’].value');");
也许?