【问题标题】:Disable back navigation in a WPF WebBrowser control在 WPF WebBrowser 控件中禁用后退导航
【发布时间】:2014-03-31 14:22:32
【问题描述】:

在我的 WPF 应用程序中,我有一个 WebBrowser 控件。我有一个包含文件的网格,当我单击网格中的某个项目时,将从数据库中检索文件内容以显示在 WebBrowser 中。

有两种类型的文件:

PDF:创建一个临时文件,使用浏览器导航功能加载文件。

HTML:字符串被传递给 NavigateToString 函数。

如果我查看 PDF,然后查看 HTML 文档,右键单击会显示上下文菜单。我想保留大部分内容,例如打印,但我想阻止浏览器让用户返回页面,甚至前进。

如果不编辑内容以添加 Javascript 等,我可以在控件上做些什么来阻止后退/前进的发生吗?

【问题讨论】:

    标签: c# wpf navigation webbrowser-control


    【解决方案1】:

    我想出的答案是导航事件。包含 Web 浏览器的用户控件有一个私有布尔值,用于确定是否允许导航。

    如果是(通过用户控件的 Navigate 方法设置),则控件可以导航到新页面。页面加载后,布尔值设置为 false,表示后退/前进已禁用。

    就我而言,这增加了一个好处:无法点击链接。我不希望在浏览器控件中加载这些内容 - 我只想查看在网格中选择的页面。

    但是,右键单击链接仍然具有在新窗口中打开的选项。

    这可能不是最好的解决方案,但它对我有用。

    【讨论】:

      【解决方案2】:

      要禁用退格键进行向后导航,但仍保持文本框的链接可点击和退格键功能,我们需要为 PreviewKeyDown 和 WebBrowser 的 Navigating 事件添加事件处理程序:

      // member variable to indicate if the window allows navigation to other URL
      private bool allowNavigation = false;
      private WebBrowser bs;
      
      // triggered every time a key is pressed down in the WebBrowser
      this.bs.PreviewKeyDown += (sender, args) =>
      {
          if (args.Key == Key.Back)
          {
              // temporarily disable navigation triggered by backspace
              this.allowNavigation = false;
          }
      };
      // triggered if the WebBrowser is switching URL (either by backspace or link clicking)
      this.bs.Navigating += (sender, args) =>
      {
          if (!allowNavigate)
          {
              // if not allowed, cancel navigation and set back allowNavigation
              // this will only cancel the navigation triggered by backspace
              args.Cancel = true;
              this.allowNavigation = true;
          }
      };
      

      【讨论】:

        猜你喜欢
        • 2011-09-16
        • 2015-06-13
        • 2013-12-30
        • 1970-01-01
        • 2018-02-04
        • 2014-06-22
        • 2014-01-16
        • 2017-08-07
        • 1970-01-01
        相关资源
        最近更新 更多