[Windows Phone 7 ] Set cookie to WebBrowser control

[Windows Phone 7 ] Set cookie to WebBrowser control

在Windows Phone Control有個WebBrowser控制項,用來提供可以在應用程式中載入網頁有點像是

iframe,在WebBrowser區域裡同樣可以透過觸控進行縮放滾動,達到一個類似在瀏覽器裡瀏覽網

頁般的效果,此外WebBrowser控制項也可以掛載本機網頁文件檔案直接做瀏覽。

 

然而從官方文件上可以發現WebBrowser控制項對於Cookie的操控,只提供了 GetCookies的Method

,卻沒有跟Set Cookies有關的Method or Event可以使用,那麼如果想要針對WebBrowser在瀏覽

網頁時Add Cookies,該如何達成呢?

 

Demo:

  • 利用HttpWebRequest.CookieContainer加入Cookie
string uri = "http://localhost:2012/About.aspx";

// 建構函式
public MainPage()
{
    InitializeComponent();

    SetCookie();
}

private void SetCookie()
{
    // Create a HttpWebRequest & add a cookie
    HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
    webrequest.CookieContainer = new CookieContainer();
    webrequest.CookieContainer.Add(new Uri(uri), new Cookie("Name", "Ian"));

    // Send the request
    webrequest.BeginGetResponse(new AsyncCallback(ReadCallback), webrequest);
}

 

  • 透過非同步AsyncCallback進行HttpWebResponse.GetResponseStream取得網頁Stream

 

  • 由於是利用另一個執行緒WebRequest進行Add Cookie & 取回網頁Stream

,因此再利用Dispatcher.BeginInvoke對WebBrowser進行網頁檔案的掛載

private void ReadCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

    using (StreamReader httpwebStreamReader = new StreamReader(response.GetResponseStream()))
    {
        string results = httpwebStreamReader.ReadToEnd();
        Deployment.Current.Dispatcher.BeginInvoke(delegate() { webBrowser1.NavigateToString(results); });
    }
}

 

  • 接著我們在About.aspx裡測試是否可以取得Cookies Value
protected void Page_Load(object sender, EventArgs e)
{
    if (Request.Cookies["Name"] != null)
    {
        this.TextBox1.Text = Request.Cookies["Name"].Value;
    }
    else
    {
        this.TextBox1.Text = "No Cookie";
    }
}

 

【本機筆電以Chrome直接瀏覽,結果是沒有Cookie的】

image

 

【以Windows Phone模擬器,在WebBrowser控制項瀏覽,結果是可以取得Cookie】

image

 

結論:

透過這樣的方式,應用程式就可以Add Cookie To WebBrowser,雖然是麻煩了點 微笑

只是為何Windows Phone 裡的WebBroswer不提供Set Cookie的Method,不知是否跟安全

性有關?

 

 

Ref:

WebBrowser控件的Windows Phone

WebBrowser Methods

使用Dispatcher使非UI執行緒可存取UI

How to: Get and Set Cookies

 

若本文對您有所幫助,歡迎轉貼,但請在加註【轉貼】及來源出處,並在附上本篇的超連結,感恩您的配合囉。

By No.18