所以我花了一个小时试图让它发挥作用.我正在对TWebBrowser进行一些测试,所以我可以在项目中应用我的发现.我想测试不同的加载内容的方法(URL,LoadFromStrings()和EvaluateJavaScript()).问题是,我无论如何都不能将一个简单的字符串传递给最后一个方法而不会被错误地包含在撇号中.
procedure TForm1.FormCreate(Sender:TObject);
const S='<span style="color:red">ABC</span><span style="color:green">ABC</span><span style="color:blue">ABC</span>';
begin
WebBrowser1.LoadFromStrings('<html><body><div id="target">[x]</div></body></html>','');
WebBrowser1.EvaluateJavaScript('document.getElementById("target").insertAdjacentHTML('+
'"beforend",'#39+S+#39');');
end;
Run Code Online (Sandbox Code Playgroud)
看到#39?如果没有它们,字符串将完全没有撇号发送,因此生成的JavaScript脚本无效.如果它们仍然存在,我会在字符串的每一端都有两个撇号,但仍然会弄乱脚本.这是什么?
我的pshychic调试告诉我你正在查看调试器中的字符串.单引号是字符串分隔符.所以它需要被转义.通过加倍来逃避它.所以当调试器显示如下字符串时:
'a''b'
Run Code Online (Sandbox Code Playgroud)
这实际上是三个字符长,中间字符是单引号.
所以
Writeln('a''b');
Run Code Online (Sandbox Code Playgroud)
输出
a'b
或者在代码中使用示例,请考虑以下完整程序:
{$APPTYPE CONSOLE}
const
S = '<span style="color:red">ABC</span>';
begin
Writeln(#39 + S + #39);
end.
Run Code Online (Sandbox Code Playgroud)
该计划输出:
'<span style="color:red">ABC</span>'
Run Code Online (Sandbox Code Playgroud)
如果你想避免使用硬编码字符代码,你可以使用这样的转义单引号:
Writeln('''' + S + '''');
Run Code Online (Sandbox Code Playgroud)