[CefSharp] ExecuteJavaScriptAsync 스크립트 호출에서 여러 행의 문자열 보낼 때 문제

안녕하세요.

제가 하고 싶은 것은 C#(WPF)에서 Markdown을 Html으로 변환하여 스크립트 호출을 통해 웹(CefSharp.WPF)으로 보내는(Send) 것입니다.

기본적으로는 잘 동작하지만 보내는 값이 여러 행일 때 문제가 발생합니다.

한 행으로 된 문자열은 정상 동작합니다.

// 정상 동작합니다~!
var frame = web.GetMainFrame();
frame.ExecuteJavascriptAsync("test('hello')");

하지만, 호출을 통해 보내는 값이 여러 행일 때 스크립트가 동작하지 않습니다.

// ㅠㅠ Script 동작 안함,,
string markdown = GetHtml(rawMarkdownString);
var frame = web.GetMainFrame();
frame.ExecuteJavascriptAsync($"test('{markdown}')");

일단 제가 테스트 해본 결과 test 함수의 파라메터 값이 여러 행(Multiline)일 때 문제가 발생합니다.

C#에서 스크립트 호출 시 여러 행으로 된 string 값을 보내는 방법이 있을까요?

그리고 아래는 테스트 HTML 로드 부분입니다.

string head = "<head><script>{0}</script></head>";
string body = "<div id="content"></div>";
string html = "<html><head><script>{0}</script></head><body>{1}</body></html>";

head = string.Format(head, "function test(data) { document.getElementById('content').inner.HTML = data; }");
html = string.Format(html, head, body);

web.LoadHtml(html);

읽어주셔서 감사합니다. :smile:

좋아요 2

아마도 ExecuteJavascriptAsync의 test인자인 markdown의 뉴라인으로 인해 문자열 해석 오류가 발생하는 것으로 보입니다. 적절하게 치환해 주시거나

https://cefsharp.github.io/api/63.0.0/html/M_CefSharp_WebBrowserExtensions_ExecuteScriptAsync_1.htm

의 확장 메소드를 이용해보세요

좋아요 4

@dimohy 앗 알려주신 확장 메서드로 바로 해결했습니다. :smile:

IWebBrowser web = this;
web.ExecuteScriptAsync("test", markdown);

스크립트 통해서 markdown html 문자열 실시간으로 잘 넘어가네요~
도움 주셔서 정말 감사합니다!

(완성되면 GitHub에 공개할게요)

좋아요 2

오 사이트 Blazor Server로 만들고 계시는군요! 응원합니다! :slight_smile:

좋아요 2

@dimohy 앗 응원 감사합니다 :smile:

좋아요 1