Вопрос по wpf, .net, c#, webbrowser-control – WebBrowser-Control - открыть браузер по умолчанию, нажав на ссылку

4

Я использую WebBrowser-Control в своем WPF-приложении, как

    <WebBrowser x:Name="webBrowser" Margin="0,28,0,0" />

Теперь, когда я перехожу на MHT-страницу, которая содержит ссылки и пользователь нажимает на одну из этих ссылок, новая страница открывается в WebBrowser-Control. Но он должен быть открыт в новом Default-Browser-Window. Содержимое в WebBrowser-Control не должно быть изменено. Есть ли способ изменить это поведение?

Ваш Ответ

3   ответа
-1

умолчанию, пока нажата ссылка, и он открывает ссылку, щелкнутую внутри браузера, только в Internet Explorer. Теперь мы можем использовать событие _DocumentCompleted, но для его работы необходим триггер, основанный на событиях, например кнопка ссылки. Теперь проблема в том, что если html в элементе управления браузера имеет href, то это даже не будет работать. Решением этой проблемы является использование события _NewWindow. Код указан ниже

/* The event handler*/
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            var webbrowser = (WebBrowser)sender;
            e.Cancel = true;
            OpenWebsite(webbrowser.StatusText.ToString());
            webbrowser = null;
        }

/* The function call*/
public static void OpenWebsite(string url)
        {
            Process.Start(GetDefaultBrowserPath(), url);
        }

 private static string GetDefaultBrowserPath()
        {
            string key = @"http\shell\open\command";
            RegistryKey registryKey =
            Registry.ClassesRoot.OpenSubKey(key, false);
            return ((string)registryKey.GetValue(null, null)).Split('"')[1];
        }

Предложения по улучшению приветствуются. Удачного кодирования.

Вы не нуждаетесь вGetDefaultBrowserPath код. С помощьюProcess.Start(url) (т.е. безGetDefaultBrowserPath() arg) лучше, так как она просит ОС открыть веб-страницу, и ОС, естественно, будет использовать браузер по умолчанию. Затем вам не нужен код реестра, что может привести к нарушению совместимости.
Элемент управления webbrowser не имеет какого-либо события с именем DocumentCompleted или NewWindow. Можете ли вы поделиться кодом XAML тоже.
0

WebBrowser Предполагается, что это будет похоже на то, что даже в обычном браузере, если щелкнуть гиперссылку и она представляет простой URL-адрес (а не гиперссылку на основе JavaScript), он откроет URL-адрес в этом окне браузера (и на этой конкретной вкладке).WebBrowser управление имитирует это основное поведение самого браузера.

Я думаю, что вы можете щелкнуть правой кнопкой мыши по гиперссылке и сказать "Открыть в новом окне". (посмотрите, включена ли эта опция вWebBrowser контроль).

Если этот параметр отключен, вы можете включить его с помощью специальных API-интерфейсов HTMLHost.

12

Proces.Start () на навигационное событие и установитьe.Cancel = true; так что страница в элементе управления не изменится.

Пример:

@ MainWindow.xaml.cs

using System.Diagnostics;
using System.Windows;
using System.Windows.Navigation;

namespace OpenDefaultBrowser
{
    public partial class MainWindow : Window
    {
        private static bool willNavigate;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void webBrowser1_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            // first page needs to be loaded in webBrowser control
            if (!willNavigate)
            {
                willNavigate = true;
                return;
            }

            // cancel navigation to the clicked link in the webBrowser control
            e.Cancel = true;

            var startInfo = new ProcessStartInfo
            {
                FileName = e.Uri.ToString()
            };

            Process.Start(startInfo);
        }
    }
}

@ MainWindow.xaml

<Window x:Class="OpenDefaultBrowser.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="464" Width="1046">
    <Grid>
        <WebBrowser Height="425" HorizontalAlignment="Left" Name="webBrowser1" VerticalAlignment="Top" Width="1024" Source="http://stackoverflow.com/" Navigating="webBrowser1_Navigating" />
    </Grid>
</Window>
Более безопасной проверкой может быть e.Uri == null. Это случай загрузки без кликов.

Похожие вопросы