混合导航

来源:互联网 发布:淘宝店铺 过户 公示 编辑:程序博客网 时间:2024/04/29 18:32

今天完成了webbrowser html和page之间的导航。

1、创建history类,里面包含2个stack存储前进和后退地址。 html的地址为uri类型,page的地址就是page实例(这样保证只有唯一page的实例存在)。

2、在webbrowser loadcompleted或者frame导航时,把地址加到history里。

3、在实现前进后退功能时,从page导航到html或者html导航到page,要注意frame的操作。

类的实现如下:

 class History
    {
        public History(Frame frame, WebBrowser webbrowser)
        {
            backStack = new Stack<object>();
            forwardStack = new Stack<object>();

            m_frame = frame;
            m_nowType = null;
            m_webbrowser = webbrowser;

        }

        public void operatorNavigate( object previousType)
        {
            if (m_nowType is Uri)
            {
                if (previousType is Uri)
                {
                    m_webbrowser.Navigate((Uri)m_nowType);
                }
                else
                {
                    m_frame.Navigate(m_webbrowser);
                    m_webbrowser.Navigate((Uri)m_nowType);
                }

            }
            else
            {
                m_frame.Navigate(m_nowType);
            }

        }

        public bool GoBack()
        {
            if (CanGoback())
            {
                forwardStack.Push(m_nowType);
                m_nowType = backStack.Pop();
                operatorNavigate(forwardStack.Peek());
                return true;
            }
            return false;
        }

 

        public bool GoForward()
        {
            if (CanGoForward())
            {
                backStack.Push(m_nowType);
                m_nowType = forwardStack.Pop();
                operatorNavigate(backStack.Peek());

                return true;
            }
            return false;
        }


        public (object type)
        {
            if (m_nowType != null)
                backStack.Push(m_nowType);
            m_nowType = type;
            forwardStack.Clear();
        }

        public bool CanGoback()
        {
            if (backStack.Count > 0)
                return true;
            return false;
        }

        public bool CanGoForward()
        {
            if (forwardStack.Count > 0)
                return true;
            return false;
        }

 


        private Stack<object> backStack { get; set; }
        private Stack<object> forwardStack { get; set; }

        public object m_nowType { get; set; }
        private Frame m_frame;
        private WebBrowser m_webbrowser;

    }

原创粉丝点击