標籤:exception fun outer load func 動態擷取 blog name exe
最近在做北京現代項目的時候,遇到一個需求將韓國那邊寫好的網頁嵌套到WPF程式中顯示。
開始的時候使用的是第三方的瀏覽器控制項:awesomium,在本地測試,顯示沒有問題。但是拿到客戶現場,只顯示半屏。修改各種高度,還是會出現問題,用遠端桌面開啟,顯示正常,百思不得解。
換控制項使用微軟內建的瀏覽器控制項WebBrowser,升級IE還是會出現顯示半屏問題。
查看網頁源碼,頁面顯示高度是動態擷取的,以下是網頁中的JS源碼
var wHeight, header1, header2;
wHeight = $(window).height();
header1 = $("div.board_header").outerHeight();
header2 = $("div.table_header").outerHeight();
$("div.table_scroll").css("max-height", (wHeight - header1 - header2 - 1 - 40) + "px");
max-height 擷取的值是動態擷取的,所以會導致以上的問題。
解決問題思路:頁面載入完成,通過注入JS指令碼,修改max-height,來顯示完整網頁。
源碼如下:
/// <summary>
/// 瀏覽器載入完成事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ibbWeb_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
try
{
dom = (mshtml.HTMLDocument)ibbWeb.Document; //定義HTML
dom.documentElement.style.overflow = "hidden"; //隱藏瀏覽器的捲軸
dom.body.setAttribute("scroll", "no"); //禁用瀏覽器的捲軸
dom.parentWindow.execScript(@"window.onload = function(){ $(‘div.table_scroll‘).css(‘max-height‘, ‘910px‘); setTimeout(‘window.location.href=window.location.href‘,"+refreshPageInterval+") }"); //向頁面注入javascript語句
}
catch (Exception ex)
{
LogInfo.saveLog("載入瀏覽器控制項異常:" + ex);
return;
}
}
WPF中使用WebBrowser