windowsphone中WebBrowser中的页面按级回退功能

来源:互联网 发布:中兴g180软件 编辑:程序博客网 时间:2024/05/01 22:18

在windowsphone应用开发中,我们会常用到WebBrowser这个控件。它可以浏览网页,并且可以在当前打开的网页中单击超级链接,继续打开新的网页。但是在操作中会存在这样一个问题,当按"Back"键希望返回前一个(上一级)网页时,程序会直接跳出当前的网页浏览器,直接返回到上一页面(客户端程序页面)。也就是说"Back"键会使程序返回程序的上一个PhoneApplicationPage,而不是WebBrowser中已打开过的前一个网页。

1.网页回退

我们普遍的做法会首先禁用掉Back键的功能,然后通过网页js的代码来实现网页的回退功能。在js有两种方法可以实现网页回退:

(1)Browser.InvokeScript( "eval" , "history.go(-1)" );

(2)Browser.InvokeScript( "eval" , "history.back()" );

2.退出网页/浏览器
上面的方法是不能使网页退出,而返回到上一级的程序页面的。那么在网页回到最初始页面时,是要启用Back的功能。为了在回退网页时禁用Back键,而在退出网页时启用Back,可以使用一个计数器来模拟打开的网页栈---
计数器初始化为1。打开新的网页时,计数器加一;回退网页时,计数器减一。当计数器记录为1时,此时按Back键可以实现网页的退出。

下面是简要代码:

[csharp] view plaincopy
  1. using System;  
  2. using System.Windows.Navigation;  
  3. using Microsoft.Phone.Controls;  
  4.   
  5. namespace CustomControls  
  6. {  
  7.     public partial class ClockPage : PhoneApplicationPage  
  8.     {  
  9.         #region Data Members  
  10.   
  11.         // 用于点击打开网页(非back键操作引起的)次数的统计  
  12.         private int m_PageStackCount = 0;  
  13.         // 标志是否为按Back键引起的网页跳转  
  14.         private bool m_BackKey = false;  
  15.  
  16.         #endregion  
  17.  
  18.         #region Constructor  
  19.   
  20.         public ClockPage()  
  21.         {  
  22.             InitializeComponent();  
  23.         }  
  24.  
  25.         #endregion  
  26.  
  27.         #region Protected Methods  
  28.   
  29.         protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)  
  30.         {  
  31.             // 返回到上一级页面,此方法无法使网页退出,也就是最后只能退回到首页  
  32.             Browser.InvokeScript("eval""history.back()");  
  33.   
  34.             m_BackKey = true;  
  35.   
  36.             if (m_PageStackCount > 1)  
  37.             {  
  38.                 e.Cancel = true;  
  39.                 m_PageStackCount -= 1;  
  40.             }  
  41.             else  
  42.             {  
  43.                 // 退出网页  
  44.                 e.Cancel = false;  
  45.             }  
  46.         }  
  47.   
  48.         private void Browser_Navigated(object sender, NavigationEventArgs e)  
  49.         {  
  50.             if (m_BackKey == false)  
  51.             {  
  52.                 m_PageStackCount += 1;                 
  53.             }  
  54.             else  
  55.             {  
  56.                 m_BackKey = false;  
  57.             }  
  58.         }  
  59.  
  60.         #endregion  
  61.     }  
  62. }  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一键ghost断电了怎么办 如何防止cpu降频怎么办 win7 64位系统不兼容怎么办 网页无法加载打印机插件怎么办 微信提示安装了插件怎么办 电脑上不了网怎么办 win10 win10电脑突然没网了怎么办 笔记本玩战争前线发热严重怎么办 玩战争前线总是闪退怎么办 uu加速器卡在29怎么办 新ipad下载不了东西怎么办 福昕pdf阅读器找不到图章怎么办 战地4没达到分数怎么办 植物在太暗环境怎么办 玩绝地求生机型不支持怎么办 安卓安装包损坏怎么办 方舟手游安装包损坏怎么办 7p新机耗电快怎么办 不小心把图片删了怎么办 腿上毛又长又多怎么办 征兵体检体重太轻怎么办 体检发现颈部有淋巴节怎么办? 4岁宝宝汗毛重怎么办 嘴巴张开闭不上怎么办 口张开闭不上怎么办 要去当兵有痔疮怎么办 狗舔的东西吃了怎么办 婚检说生过孩子怎么办 劳动法规定身体有疾病的怎么办 铁路对职工醉驾怎么办 入职体检高血糖怎么办 睾丸捏一下很疼怎么办 小孩睾丸受外力红肿该怎么办 睾丸炎症怎么办啊会不会不育呢 腰疼连着睾丸疼怎么办 为什么结石会睾丸疼怎么办 感觉自己睾丸变小了怎么办 宝宝小丁丁肿了怎么办 两岁宝宝高低肩怎么办 参军体检视力不过关怎么办 验兵视力不过关怎么办