WPF WebBrowser控件 - 没有LinkClicked事件

3

有人知道如何在WPF WebBrowser控件中捕获链接的点击吗?

我需要在页面导航之前获取链接的目标。

非常感谢任何意见!

我的代码解决方案 如同对简单的链接所建议的,可以通过以下代码实现:

private void webBrowser1_Navigating(object sender, NavigatingCancelEventArgs e)
{
    //prefix must be lowercase (ssrs conforms to web-standards and makes things lowercase)
            string myPrefix = "http://myPrefix";

            //check if target starts with the prefix
            if (e.Uri.AbsoluteUri.StartsWith(myPrefix))
            {
                //cancel Navigation
                e.Cancel = true;
            }
}

谢谢你在这件事上帮助了我。
3个回答

3
您可以将事件处理程序附加到Navigating事件。在页面导航之前,提取链接并执行您的逻辑。祝好!

但有时候点击链接并不会导航,而是执行一个JavaScript处理程序。 - STO
谢谢你们两位@DrakeVN,我尝试在Navigated事件中获取加载页面中的所有链接,并为每个单独的链接添加事件。但是这会变得有点棘手,因为需要使用许多com_objects。与Windows Forms中的WebBrowser控件相比,很多东西似乎都发生了变化。我将尝试您更简单的方法。@STO:在我的情况下,具有javascript处理程序的链接不应该成为问题,因为我在Reporting Services中使用捕获的链接来打开相应的元素。 - SwissCoder
如果JavaScript处理程序执行一些处理,然后执行window.open,是否有一种方法来捕获该打开并在容器应用程序的范围内显示该URL,可能是在WebBrowser控件的新实例中。 - NitinSingh

1

谢谢,我想应该有更简单的方法,而且以下内容不允许我使用:安全提示 此类型或成员在Internet安全区域中不可用。 - SwissCoder

0
在WebBrowser导航事件处理程序中控制您的点击。您可以在Xal或构造函数中创建此内容,并使用以下方法:
    private void webBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        // The WebBrowser control is checking the Uri 
        if (e.Uri.ToString() != "Place your url string here") //ex: "http://stackoverflow.com"
        {
            // Uri is not the same so it cancels the process
            e.Cancel = true;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接