我想用这样的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;
}
我想打印的页面与淘汰赛呈现。 HTML元素绑定到Javascript Knockout模型。当执行Javascript并更新HTML时,模型被初始化。
我只得到一个空白页。
我认为正在发生的是主框架的FinishLoadingFrameEvent执行之前的JavaScript - 或 - 的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()的脚本块,如果我执行,而不是“窗口”它似乎也工作。
这是可靠的吗?感觉像一个黑客。
感谢尤金,我们现在可能会选择1。 – Hawk