【问题标题】:Handling hardware back button and sending it to WebBrowser control running on Windows Phone处理硬件后退按钮并将其发送到在 Windows Phone 上运行的 WebBrowser 控件
【发布时间】:2011-02-24 04:58:11
【问题描述】:

我在 PhoneApplicationPage 中嵌入了一个 Web 浏览器控件。我必须处理硬件返回按钮并强制网络浏览器返回。

know如何处理硬件后退按钮。

如何强制网络浏览器转到上一页? WinForms webbrowser 上看似简单的GoBack()CanGoBack 属性在Windows Phone 上似乎不见了。

【问题讨论】:

    标签: .net windows-phone-7 webbrowser-control


    【解决方案1】:

    我刚刚在Overflow7 中处理了同样的问题

    我决定用 C# 而不是 Javascript 来处理这个问题。基本上,在我的页面中,我添加了一堆 Uri:

        private Stack<Uri> NavigationStack = new Stack<Uri>();
    

    那么我已经截获了浏览器的 Navigated 事件:

        void TheWebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            NavigationStack.Push(e.Uri);
        }
    

    然后在返回键按下覆盖时,如果可以的话,我会尝试使用返回按钮进行导航:

        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            if (NavigationStack.Count > 1)
            {
                // get rid of the topmost item...
                NavigationStack.Pop();
                // now navigate to the next topmost item
                // note that this is another Pop - as when the navigate occurs a Push() will happen
                TheWebBrowser.Navigate(NavigationStack.Pop());
                e.Cancel = true;
                return;
            }
    
            base.OnBackKeyPress(e);
        }
    

    请注意,此解决方案不适用于墓碑 - 也不适用于“ajax”网站 - 但总体而言,它似乎运行良好。

    【讨论】:

    • Stuart,我认为这是一个好主意,我以前使用过 Uri Stack,因为它是一种在使用网络浏览器任务时改善用户体验的好方法
    • 以防万一其他人对此感到困惑-“导航”事件仅在用户最终进入全新页面时触发(并且不会触发内部#inthispage 书签)。但是,一切都没有丢失 - 在这些情况下,“导航”事件仍然会触发。
    【解决方案2】:

    如果您通过设置IsScriptEnabled="true"WebBrowser 控件上启用脚本,则可以使用以下命令在浏览器中向后导航:

    private void backButton_Click(object sender, EventArgs e)
    {
      try
      {
        browser.InvokeScript("eval", "history.go(-1)");
      }
      catch
      {
        // Eat error
      }
    }

    您可以在 Shaw Wildermuth 的博文 Navigating with the WebBrowser Control on WP7 中找到此代码(以及更多内容)。

    【讨论】:

    • 脏但好看的 hack %)
    • 我仍然无法预测我是否可以回去。 (根据历史禁用我的后退按钮)旧的 silverlight4 有 CanGoBack 属性,不幸的是它丢失了。
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多