现在的位置: 首页 > 综合 > 正文

[Windows Phone 7 ] Set cookie to WebBrowser control

2013年10月13日 ⁄ 综合 ⁄ 共 2007字 ⁄ 字号 评论关闭

在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,不知是否跟安全性有关?

  本文来自ian的博客,原文地址:http://www.dotblogs.com.tw/ian/archive/2012/06/24/73013.aspx

抱歉!评论已关闭.