韌館-LearnHouse

[WP7]Microsoft.Phone.Controls.WebBrowser應用

在開始之前要先祝賀一下本站終於可以在網誌上放置AdSense了
事隔七年,七年前因為違反google的規定而被逐出這個計畫
這次的教訓,讓我寫一半還會沒貼出來的外掛心得,更不太敢發表出來了
初來到台北,由於沒什麼朋友,所以假日都在研究寫遊戲外掛
而在寫外掛同時,還寫出了一個很邪惡的木馬程式
這些心得應該沒機會分享出來了吧!!那就只好分享比較正向的東西。
今天要講Phone 7的WebBrowser運用
1.首先是最典型的開啟網頁
先從ToolBox拉出WebBrowser控制項,然後只要一行指令就OK了

this.webBrowser1.Navigate(new Uri("http://learn-house.idv.tw"));

其中webBrowser1要按照你在XAML裡的名字做更改

2.再來當載入或開啟完網頁後,如果你有要做進一步的事情,可以用下面的方式來處動事件

this.webBrowser1.Navigate(new Uri("http://learn-house.idv.tw"));
this.webBrowser1.Navigated += webBrowser1_Navigated;

void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
 //任何當網頁載完後你想做的事
}

3.像我的話就常將載入完的結果輸出成html的字串觀看,這時候就加入一行指令將載完後的網頁輸出成原始碼

void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
 string strWebContent = webBrowser1.SaveToString();
 //strWebContent就是原始碼字串內容
}

4.如果哪天,你有自己的html字串要用WebBrowser控制項顯示,你可以用下列的指令

this.webBrowser1.NavigateToString(strWebContent);
//strWebContent即html字串

5.但這篇的重點來了,你會發現中文的地方都變亂碼了,目前解法有幾種,在這一篇連結的評論有提到
但我個人還是偏愛該作者的做法,寫一個函式去做轉換,不然就等Microsoft何時解決這個問題囉!

private static string ConvertExtendedASCII(string HTML)
{
 string retVal = "";
 char[] s = HTML.ToCharArray();

 foreach (char c in s)
 {
 if (Convert.ToInt32(c) > 127)
 retVal += "&#" + Convert.ToInt32(c) + ";";
 else
 retVal += c;
 }

 return retVal;
}

之後只要將字串先用此函式轉換後就可以丟入NavigateToString

this.webBrowser1.NavigateToString(ConvertExtendedASCII(strWebContent));

6.最後,你會發現WebBrowser很雞婆的會將顯示的網頁縮小到螢幕可以顯示的比例,然後又很機車的是又不提供可以取消的method讓你控制,你只能在螢幕double tap來放大,而要預設讓它變大,目前似乎只能透過更改顯示網頁的內容,但有些網頁又不是我們能控制的,希望以後微軟能提空放大的控制方式,目前的解法只能在網頁多加一個標籤,如下

<meta name="viewport" content="user-scalable=no" />

<meta name="viewport" width="100%" />
2011年12 月 posted by admin in 程式&軟體 and have No Comments

Place your comment

Please fill your data and comment below.
名稱:
信箱:
網站:
您的評論: