결과를 반환하는 JavaScript 메소드 호출
참고
https://github.com/cefsharp/CefSharp/wiki/General-Usage#javascript-integration
https://stackoverrun.com/ko/q/9144245
다음중 하나를 사용하시면 됩니다.
//메인 프레임에 대해 JavaScript를 평가하는 확장 메서드입니다.
Task<JavascriptResponse> response = await browser.EvaluateScriptAsync(script);
//프레임에 대해 직접 자바 스크립트 실행
Task<JavascriptResponse> response = await frame.EvaluateScriptAsync(script);
JavaScript 코드는 비동기 적으로 실행되며 Task<JavascriptResponse>오류 메시지, 결과 및 성공 ( bool) 플래그 를 포함하는 반환 됩니다.
평가할 때 알아야 할 JavaScript 기본 사항은 다음과 같습니다.
.javascript 실행은 V8Context 내에서만 실행할수 있습니다.
.스크립트는 프레임 수준에서 실행되며 모든 페이지에는 하나 이상의 프레임 ( MainFrame)이 있습니다.
.프레임에 JavaScript가 포함되어 있지 않으면 V8Context생성 되지 않습니다
.프레임이 로드 된 후 스크립트를 실행하는 컨텍스트가 없는 프레임의 경우를 사용하여 V8Context를 생성 할 수 있습니다 IFrame.ExecuteJavaScriptAsync
.스크립트는 렌더링 프로세스에서 실행되며를 통해 전송되며 IPC성능상의 이유로 필요한 데이터 만 반환합니다.
.기본 데이터 유형 int, double, date, bool 및 string이 지원됩니다.
.객체가 어느 정도 지원하고 반환됩니다 IDictionary<string, object>,의 사용 dynamic키워드는 쉽게 속성 값을 액세스 할 수 있도록 지원합니다.
.위에 나열된 기본 요소와 객체를 포함하는 배열이 지원되며 IList<object>.Array LikeHTMLCollection 과 같은 객체 는 직접 반환 할 수 없습니다. Array.from 을 사용 하여 반환하고 배열합니다.
.반환 할 수있는 개체 그래프의 복잡성에는 제한이 있습니다.
이러한 경우 JavaScript JSON.toStringify()메서드 를 사용하여 JavaScript 개체를 JSON 문자열로 변환하고 해당 문자열을 .NET 코드로 반환해야 할 수 있습니다.
그런 다음 JSON.NET과 같은 것을 사용하여 해당 문자열을 .NET 개체로 디코딩 할 수 있습니다. 자세한 내용은이 MSDN 링크를 참조하십시오.
( https://msdn.microsoft.com/en-us/library/ie/cc836459(v=vs.94).aspx )
frame_load_finish();
/**
*
* MainFrame 로드를 완료 할 때까지 기다립니다.
*
*/
private void frame_load_finish()
{
// MainFrame이로드를 완료 할 때까지 기다립니다.
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
args.Frame.ExecuteJavaScriptAsync("alert('MainFrame finished loading');");
browser.ExecuteScriptAsync("document.body.style.background = 'blue';");
browser.ExecuteScriptAsync("aa();");
Task task = new Task(() => {
//object js = EvaluateScript(browser, "document.getElementsByTagName('html')[0].innerHTML;");
object js = EvaluateScript(browser, "bb();");
MessageBox.Show(js.ToString());
});
task.Start();
}
};
}
static object EvaluateScript(ChromiumWebBrowser b, string script)
{
var task = b.EvaluateScriptAsync(script);
task.Wait();
JavascriptResponse response = task.Result;
return response.Success ? (response.Result ?? "") : response.Message;
}
웹페이지 javascript
<script>
function bb() {
return "bbbbbbbb";
}
</script>
'프로그래밍 > c#' 카테고리의 다른 글
JavaScript 에서 C# 클래스 호출하는 방법 (0) | 2021.11.26 |
---|---|
C# cefSharp 이용시 개발자도구 보고 싶을때 (0) | 2020.10.06 |
c# 에서 javascript 바인딩하는 방법1 (0) | 2020.10.06 |