我想用這樣的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