【问题标题】:How to wait for knockout page to finish loading before printing in DotNetBrowser?如何在 DotNetBrowser 中打印之前等待淘汰页面完成加载?
【发布时间】:2017-06-21 05:27:41
【问题描述】:

我正在尝试使用 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 模型。执行 Javascript 并更新 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() 的脚本块,如果我执行它而不是“窗口”,它似乎也可以工作。

这可靠吗?感觉像个黑客。

【问题讨论】:

    标签: knockout.js dotnetbrowser


    【解决方案1】:

    页面加载后似乎正在生成 DOM 模型。在这种情况下,DotNetBrowser 报告页面已加载,但 Knockout 库尚未更新内容。

    这种情况下的选择很少。

    选项 1:

    执行'ko.ApplyBindings()',就像你提到的那样。方法执行后,网页内容应已加载并准备好打印。

    选项 2:

    使用JS-.NET Bridge 通知 .NET 方有关内容已加载。在这种情况下,您需要将 .NET 对象注入 Javascript。该对象应包含启动打印的方法。 DOM 加载完成后,Knockout 应该调用这个方法。

    【讨论】:

    • 谢谢尤金,我们现在可能会选择选项 1。
    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2018-10-11
    相关资源
    最近更新 更多