Awesomium.NET在默认浏览器中打开链接

时间:2014-04-23 05:43:18

标签: wpf wpf-controls web-controls awesomium

WPF中的awesomium web控件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;
        }
    }

2 个答案:

答案 0 :(得分:2)

我已经做了一些搜索来解决我的问题,几天后我发现,当链接有一个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;
    }
}

答案 1 :(得分:0)

您可以尝试使用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())可以做任何事情(启动应用程序或格式化磁盘)。因此,请不要忘记测试它是有效的网址还是mailto:链接。