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

在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 plain copy
  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. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值