DotNetBrowser에서 인쇄하기 전에 녹아웃 페이지로드가 완료 될 때까지 기다리는 방법은 무엇입니까?

다음과 같은 코드를 사용하여 DotNetBrowser를 사용하여 인쇄하려고합니다.

    public void PrintUrl(string url)
    {
        using (var browser = BrowserFactory.Create())
        {
            browser.PrintHandler = this;
            _waitEvent = new ManualResetEvent(false);

            browser.FinishLoadingFrameEvent += (sender, e) => 
            {
                if (e.IsMainFrame)
                {
                    browser.Print();
                }
            };

            browser.LoadURL(url);
            _waitEvent.WaitOne();
        }
    }

    public PrintStatus OnPrint(PrintJob printJob)
    {
        printJob.PrintJobEvent += (sender, args) => _waitEvent.Set();
        return PrintStatus.CONTINUE;
    }

인쇄하려는 페이지가 Knockout으로 렌더링됩니다. HTML 요소는 Javascript Knockout 모델에 바인딩됩니다. 모델은 자바 스크립트가 실행되고 HTML이 업데이트 될 때 초기화됩니다.

빈 페이지 만 표시됩니다.

내가 생각하는 것은 Javascript가 실행되기 전에 메인 프레임의 FinishLoadingFrameEvent가 트리거되거나 Javascript가 실행 된 후 바인딩 된 HTML 요소가 업데이트되기 전에 이벤트가 트리거된다는 것입니다.

인쇄 호출 직전에 다음 코드를 추가하여 인쇄 작업을 수행 할 수 있습니다.

        browser.FinishLoadingFrameEvent += (sender, e) => 
        {
            if (e.IsMainFrame)
            {
                // executing javascript seems to update the DOM
                browser.ExecuteJavaScriptAndReturnValue("window"); 
                browser.Print();
            }
        };

ExecuteJavaScriptAndReturnValue 호출이 작동하는 것처럼 보이지만 이것이 안정적인지 모르겠습니다. 기본 KO 모델을 기반으로 DOM을 업데이트하는 확실한 방법이 있습니까?

페이지 자체에는 ko.applyBindings ()를 호출하는 스크립트 블록이 포함되어 있으며 "window"대신 실행하면 작동하는 것 같습니다.

그래도 신뢰할 수 있습니까? 해킹처럼 느껴집니다.

유진 야 쿠시

페이지가로드 된 후 DOM 모델이 생성되는 것 같습니다. 이 경우 DotNetBrowser는 페이지가로드되었지만 Knockout 라이브러리에 의해 콘텐츠가 아직 업데이트되지 않았다고보고합니다.

이 경우에는 몇 가지 옵션이 있습니다.

옵션 1:

언급 한대로 'ko.ApplyBindings ()'를 실행합니다. 메서드 실행 후 웹 페이지 콘텐츠가로드되고 인쇄 할 준비가되어 있어야합니다.

옵션 2 :

컨텐츠가 JS-.NET Bridge를 사용하여로드 되었음을 .NET 측에 알립니다 . 이 경우 .NET 객체를 Javascript에 삽입해야합니다. 해당 개체에는 인쇄를 시작하는 메서드가 포함되어야합니다. DOM이로드 된 후 Knockout은이 메서드를 호출해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관