关于使用Webbrowser打开PPT的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于使用Webbrowser打开PPT的问题相关的知识,希望对你有一定的参考价值。

如题,使用WinForm和WPF中的Webbrowser组件打开PPT和PPTX文件中出现的问题。在WinForm中调用Webbrowser组件的Navigate方法能够成功的在webbrowser中打开并播放ppt和pptx文件,但是一旦在WPF中,同样的webbrowser组件,一样的Navigate方法一样的ppt和pptx文件却没有办法打开。
下面两张图分别是在Winform和WPF中打开ppt文件的结果。

打开ppt文件部分的代码如下:
private void Button_OpenPPT_Click(object sender, RoutedEventArgs e)

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Media Files|*.ppt;*.pptx;|All Files|*.*";
if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)

string TmpUrl = openFileDialog.FileName.ToString();
this.WebBrowser_ForPPT.Navigate(TmpUrl);

else ;

求各位大侠帮忙!!急!!

参考技术A 上面的提示已经说了可能是你路径不对或者含有特殊字符!

你尝试在C盘根目录下建立一个英文名字的文档ABC.ppt,打开试试.

WPF WebBrowser - 在默认浏览器中打开链接

【中文标题】WPF WebBrowser - 在默认浏览器中打开链接【英文标题】:WPF WebBrowser - open links in default browser 【发布时间】:2016-01-28 10:30:06 【问题描述】:

我正在使用 WPF System.Windows.Controls.WebBrowser 控件来显示一些从服务下载的 HTML 内容。有时 HTML 包含应该可以点击的 URL(“a”元素)。

默认情况下,单击此类 URL 时,它会在 Internet Explorer 中打开。我希望它们改为在默认浏览器中打开。

注意,我专门讨论的是 WPF WebBrowser。 WinForms 浏览器有很多解决方案,但它们不适用于 WPF 浏览器。

最常见的“解决方案”是处理 Navigating 事件,取消它,然后用 URL 做你自己的事情。这不起作用,因为当我单击 HTML 中的链接时不会调用 Navigating 事件。

我发现的另一个解决方案似乎确实有效,但有时只是出于某种奇怪的原因:https://***.com/a/9111151/573249

我现在有以下代码,使用上面链接中的方法:

private void WebBrowser_OnNavigating(object sender, NavigatingCancelEventArgs e)

    // Just for demonstration purposes
    // This is NOT CALLED when a link is clicked

    Debug.WriteLine("> Navigating called.");

    if (e.Uri == null)
    
        Debug.WriteLine(">> URI was null.");
        return;
    
    e.Cancel = true;
    Process.Start(e.Uri.AbsolutePath);
    Debug.WriteLine(">> Navigation cancelled and opened in default browser.");


private void WebBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)

    Debug.WriteLine("> LoadCompleted called.");

    mshtml.HTMLDocument doc;
    doc = (mshtml.HTMLDocument) webBrowser.Document;
    mshtml.HTMLDocumentEvents2_Event iEvent;
    iEvent = (mshtml.HTMLDocumentEvents2_Event) doc;
    iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);

    Debug.WriteLine("> LoadCompleted finished!");
    Debug.WriteLine("------");


private bool ClickEventHandler(mshtml.IHTMLEventObj e)

    // This finally opens the URL in the default browser
    // The method is called only 20% of the time.

    Debug.WriteLine(">> Click event handler called.");

    var a = (mshtml.HTMLAnchorElement) e.srcElement;
    Process.Start(a.href);
    return false;

当我点击一个链接时,它似乎有 20% 的时间可以工作。在这些情况下,将调用“ClickEventHandler”,并在默认浏览器中打开链接。在其他 80% 的情况下,“ClickEventHandler”永远不会被调用(并且链接会在 IE 中打开),即使“OnLoadCompleted”完成时没有异常。

似乎没有一种模式,尽管当它一旦失败时,它似乎在同一个文档上永远失败,直到我重新加载 HTML。重新加载后,它恢复到 20% 的工作机会。

发生了什么事?

【问题讨论】:

好吧,我使用 WPF WebBrowser 并处理 Navigation 事件,它对我有用。当我点击 HTML 中的链接时会调用事件。 【参考方案1】:

您好,我遇到了完全相同的问题。 OnMouseDown 事件有时会被触发。我无法弄清楚这一点。我只是放弃并改用 WinForm WebBrowser。 那么您不需要参考 MSHTML,但需要参考 System.Windows.Forms 和 System.Windows.Interactivity。

XAML

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

<WindowsFormsHost>
  <wf:WebBrowser x:Name="WbThumbs"/>
</WindowsFormsHost>

C#

public WMain() 
  System.Windows.Forms.Application.EnableVisualStyles();
  InitializeComponent();

  WbThumbs.DocumentCompleted += WbThumbsOnDocumentCompleted;
  WbThumbs.Navigate("www.blabla.com");


private void WbThumbsOnDocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e) 
  if (WbThumbs.Document == null) return;
  WbThumbs.Document.Click += WbThumbs_Click;


private void WbThumbs_Click(object sender, System.Windows.Forms.HtmlElementEventArgs e) 
  var doc = WbThumbs.Document;
  var src = doc?.GetElementFromPoint(e.ClientMousePosition);
  if (src == null) return;
  //...

【讨论】:

以上是关于关于使用Webbrowser打开PPT的问题的主要内容,如果未能解决你的问题,请参考以下文章

wpf webBrowser 禁用超链接

关于在VB webbrowser中点击链接 新打开默认浏览器

关于WebBrowser1打开网页

关于ActiveX在WebBrowser不加载问题

关于WPF添加按钮

关于python的webbrowser