【问题标题】:Awesomium.NET open links in default browserAwesomium.NET 在默认浏览器中打开链接
【发布时间】:2014-04-23 05:43:17
【问题描述】:

我在 WPF 中使用 awesomium web control 1.7.4 时遇到问题,当用户单击页面中的链接时,awesomium 导航到 targetURL,但我想在系统默认浏览器中打开该链接。

我还想确定 mailto:jondue@example.com 在默认电子邮件客户端中打开此链接。

请帮帮我。

谢谢

更新:

我一直在做更多的搜索来解决我的问题,几天后我发现当链接有target=_blank 时,会触发ShowCreatedWebView 事件。主要问题是关于没有target=_blank 的链接。之后,我可以找到链接,而不会导致触发事件RequestBringIntoView

private void Browser_ShowCreatedWebView(object sender, Awesomium.Core.ShowCreatedWebViewEventArgs e)
    {
        System.Diagnostics.Process.Start(Browser.TargetURL.AbsoluteUri);
    }

private void Browser_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
    {
        if (Browser.TargetURL != new Uri("about:blank"))
        {
            System.Diagnostics.Process.Start(Browser.TargetURL.AbsoluteUri);
            e.Handled = true;
        }
    }

【问题讨论】:

标签: wpf wpf-controls web-controls awesomium


【解决方案1】:

我一直在做更多的搜索来解决我的问题,几天后我发现当链接有一个 target=_blank 时,会触发 ShowCreatedWebView 事件。主要问题是关于没有 target=_blank 的链接。之后,我可以找到不会触发事件 RequestBringIntoView 的链接。

private void Browser_ShowCreatedWebView(object sender, Awesomium.Core.ShowCreatedWebViewEventArgs e)
{
    System.Diagnostics.Process.Start(Browser.TargetURL.AbsoluteUri);
}

private void Browser_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
    if (Browser.TargetURL != new Uri("about:blank"))
    {
        System.Diagnostics.Process.Start(Browser.TargetURL.AbsoluteUri);
        e.Handled = true;
    }
}

【讨论】:

    【解决方案2】:

    您可以尝试使用 IResourceInterceptor 来决定 Awesomium 加载页面时要执行的操作。

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            WebCore.Initialize(new WebConfig());
            WebCore.Initialized += ((object sender, CoreStartEventArgs e) =>
            {
                WebCore.ResourceInterceptor = new ResourceInterceptor("http://google.com/");
            });
    
            InitializeComponent();
        }
    }
    
    
    public class ResourceInterceptor : IResourceInterceptor
    {
        //Url of the first page to be loaded inside webcontrol without redirection.
        protected string m_startupURL;
    
        public ResourceInterceptor(string startupURL)
        {
            m_startupURL = startupURL;
        }
    
        public virtual bool OnFilterNavigation(NavigationRequest request)
        {
            if (request.Url.ToString() != m_startupURL)
            {
                System.Diagnostics.Process.Start(request.Url.ToString());
                return true;
            }
    
            return false;
        }
    
        public ResourceResponse OnRequest(ResourceRequest request)
        {
            return ResourceResponse.Create(request.Url.OriginalString);
        }
    }
    

    这是一个非常基本的实现。您应该在 Url 上添加一些额外的测试。实际上Process.Start(request.Url.ToString()) 可以做任何事情(启动应用程序或格式化磁盘)。所以不要忘记测试它是有效的 Url 还是 mailto: 链接。

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多