尝试将第二个参数传递给JS函数时出现语法错误

时间:2017-02-13 16:59:42

标签: javascript android webview

以下作品:

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)

我做错了什么?

3 个答案:

答案 0 :(得分:2)

用'

替换所有'字符

(从这里复制/粘贴,因为它们看起来像是彼此)

在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()究竟做什么,我们就不知道哪一个是正确的。

答案 1 :(得分:1)

我相信这是问题所在。在您的第一个(工作)示例中,

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'

答案 2 :(得分:0)

嗯,现在看看你的代码,我可以看到

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');");

也许?