2

そのため、これを機能させるために1時間費やしました。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;

#39を参照してください?それらがないと、文字列はアポストロフィなしで送信されるため、結果の JavaScript スクリプトは無効になります。それらが残っていると、文字列の両端に 2 つのアポストロフィが付き、スクリプトが台無しになります。これは何ですか?

4

1 に答える 1

6

私の精神的なデバッグは、デバッガーで文字列を見ていることを教えてくれます。一重引用符は文字列の区切り文字です。したがって、エスケープする必要があります。二重にすることで回避されます。したがって、デバッガーが次のような文字列を表示する場合:

'a''b'

これは実際には 3 文字の長さで、中央の文字は単一引用符です。

そう

Writeln('a''b');

出力

a'b

または、コードで例を使用するには、次の完全なプログラムを検討してください。

{$APPTYPE CONSOLE}
const
  S = '<span style="color:red">ABC</span>';
begin
  Writeln(#39 + S + #39);
end.

このプログラムは次を出力します。

'<span style="color:red">ABC</span>'

ハードコードされた文字コードの使用を避けたい場合は、次のようにエスケープされた一重引用符を使用できます。

  Writeln('''' + S + '''');
于 2015-06-07T09:33:06.307 に答える