webbrowser解决页面导航问题


一、获取webbrowser里面的链接(我写的是获取href的内容,也就是http://baidu.com)

  其实很简单,是我想复杂了,webbrowser控件有2个方法,navigating和navigated方法,点击控件里面别的链接,要离开页面的时候,需要的是navigating方法,这个时候我们传一个值:

private void wb_Navigating(object sender, NavigatingEventArgs e)
{
navigatingURL = e.Uri.ToString();//获取到我们点击的值,并把它转化成字符串。

NavigationService.Navigate(new Uri("/landscapepage.xaml?id="+navigatingURL, UriKind.Relative));//注意传参的时候:id=1,则传到另一个界面1(如果写id=navigatingURL ,则传到第二个界面的是navigatingURL 这个字符串本身,而不是其数值),如果“id=”+Value,则传过去的是value,就是navigatingURL了,现在我们传到另一个界面的是字符串“http://baidu.com”


string html = "<a href='http://www.baidu.com' target='_blank'><img src='Images/1.jpg' width='100' height='100'>点击查看详细数据</a><b>hellow</b>";
wb.NavigateToString(ConvertExtendedASCII(html));//工程加载(初始化)的时候其实已经传过来一次了,重新写一次,不然本页的webbrowser当返回的时候,也会导航到标签链接的那个页面。(href的链接一定不要写错了,多一个/,都会在传参的时候出现错误,在另一个界面就多了个“about:/”)

ProgBar.Visibility = Visibility.Visible;//前台加个prograssbar,当正在跳转的时候显示不定性的prograssbar(xaml代码):<ProgressBar Foreground="Orange" x:Name="ProgBar" Visibility="Collapsed" IsIndeterminate="True" Height="4" HorizontalAlignment="Left" VerticalAlignment="Top" Width="460" />

}

二、接受页面:这个页面比较简单了,重写一下导航到本页面的参数就行了。接参数是参考的msdn第七项:http://social.msdn.microsoft.com/Forums/zh-CN/5aacf6ab-dab7-4dcc-9d3d-d2c9095e490e/windows-phone-7-

protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
String id=NavigationContext.QueryString["id"];
tb.Text = id;
}

三、关于跳转的时候进度条问题

1.基本场景:跳转完了,prograssbar也就跟着消失了。如果页面不跳转到别的页面的话,在当前页面继续加载,这个时候就用到了这个设置了。

private void wb_Navigated(object sender, NavigationEventArgs e)
{
ProgBar.Visibility = Visibility.Collapsed;

}

2.特殊场景:用户如果快速操作,这个时候如果操作进度条,有可能导致webview崩溃,

原因:操作了“当前页面的进度条”

解决方案:可以在LoadCompleted这个方法里用try catch处理,

private void WBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)
        {
            try
            {
                var str1 = WBrowser.SaveToString();
                GetProgressBar(false);//界面如果已经跳转,这句会报错
            }
            catch (Exception)
            {
            }
        }
进度条处理

四、关于http传参

鉴于httpwebrequest的时候;url中特殊含义的字符会被特殊解析,所以用key-value传参数值(注意不是参数名)时,要统一进行httputility.urlencode(url)转码。

  //签名验证
      public static string[] Sign(Dictionary<string, string> paraDictionary)
      {
          var list = new List<string>();
          string list1 = "";
          foreach (var kv in paraDictionary)
          {
              list.Add(String.Format("{0}{1}", kv.Key, kv.Value));
              //注意这里,对返回参数的值进行编码
              list1 += String.Format("{0}={1}&", kv.Key, HttpUtility.UrlEncode(kv.Value));
          }
          list.Sort();
          string tmp = list.Aggregate("", (current, kvstr) => current + kvstr);
          string sign = Hmac(tmp);
          string[] arrStrings = { list1, sign };
          return arrStrings;
      }
签名验证

五、HMAC加密算法:

      private static string Hmac(string list)
      {
          byte[] byte1 = Encoding.UTF8.GetBytes(Publickey);
          byte[] byte2 = Encoding.UTF8.GetBytes(list);
          var hmac = new HMACSHA1(byte1);
          byte[] hashValue = hmac.ComputeHash(byte2);
          string hasvale1= Convert.ToBase64String(hashValue);
          return hasvale1;
      }
hmac加密

优质内容筛选与推荐>>
1、paip. java的 函数式编程 大法
2、hibernate的映射关系之多对一
3、从头搭建Openstack运行环境(五)--虚机添加floating ip
4、Visual Studio 模板 —— 自定义WebForm模板
5、WPF学习计划 - Visual


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn