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;
}
}
答案 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:
链接。