CefSharp загружает страницу с входом в браузер

Мне нужно внедрить веб-браузер в приложение Wpf, я попытался использовать браузер из панели инструментов, но получил некоторые проблемы и пошел в CefSharp.

public MainWindow()
{
 InitializeComponent();
 BrowserSettings settings = new BrowserSettings();
 Cef.Initialize(new CefSettings());           
CefSharp.Wpf.ChromiumWebBrowser webBrowser = new CefSharp.Wpf.ChromiumWebBrowser();
  licence_grid.Children.Add(webBrowser);
  webBrowser.Address = "http://myurlToLoad the page";
}

Проблема в том, что когда я использовал обычный URL-адрес загрузки страницы. Но когда я использовал URL-адрес, который я намереваюсь использовать, и с которым пользователь вводит своего пользователя и пароль в всплывающем окне браузера (я имею в виду не всплывающее окно с веб-сайта). Я получаю сообщение об ошибке, что эта страница загружается слишком долго, и больше ничего. Может кто-нибудь дать мне несколько треков... Спасибо.


person Alain BUFERNE    schedule 13.04.2015    source источник
comment
Какую ошибку вы видите? Также есть несколько примеров проектов, которые помогут вам начать работу: см. github.com/cefsharp/CefSharp.MinimalExample. Попробуйте загрузить свою веб-страницу, используя пример, и посмотрите, появится ли аналогичная ошибка. Также полезно, если вы включите версию CefSharp в качестве общей практики.   -  person amaitland    schedule 14.04.2015


Ответы (2)


Похоже, всплывающее окно, о котором вы говорите, на самом деле является сайтом, запрашивающим basic аутентификацию.

В этом случае вам необходимо предоставить IRequestHandler.GetAuthCredentials обработчик.

person jornh    schedule 14.04.2015
comment
да, я не нашел подходящего слова.... Значит, вы имеете в виду, что мне нужно реализовать обработчик и сделать самому окно подсказки, получить пользователя и pwd и поместить vthese значения в строку, передаваемую по ссылке в обработчике. .. - person Alain BUFERNE; 14.04.2015
comment
Да, в основном предоставьте пользователю свой собственный диалог для захвата имени пользователя и пароля, затем установите два параметра ref и верните true; github.com/cefsharp/CefSharp/blob/master/CefSharp/ - person amaitland; 14.04.2015
comment
Хорошо, большое спасибо, я исхожу из MS ActiveX, поэтому мне нужно узнать, я нашел документ не очень хорошим. - person Alain BUFERNE; 14.04.2015
comment
вы реализовали GetAuthCredentials и сработало ли это? - person shyam_; 01.01.2017
comment
На самом деле я передумал и обратился к Electron для разработки своего приложения. - person Alain BUFERNE; 24.02.2017
comment
Я реализовал обработчик GetAuthCredentials; внутри него поместите модальное окно для получения пользователя и пароля, но это не работает из-за этой ошибки: System.InvalidOperationException: «Вызывающий поток не может получить доступ к этому объекту, потому что им владеет другой поток». Это код, помещенный в обработчик: AuthBox dlg = new AuthBox(); dlg.Owner = _parent; dlg.ShowDialog(); Есть идеи, что происходит? - person Cami Rodriguez; 17.12.2018

Поскольку вопрос и ответ очень старые, и я хотел бы предоставить последнее обновление этого решения, есть небольшие изменения в соответствии с предложенным исходным решением.

любой, кто использует cefsharp, должен реализовать диалог аутентификации. и изменения в методе

 bool IRequestHandler.GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, 
        string host, int port, string realm, string scheme, IAuthCallback callback)
    {
        //NOTE: If you do not wish to implement this method returning false is the default behaviour
        // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource.

        // shyam - original implemenation.
        //callback.Dispose();
        //return false;

        bool handled = false;

        // Instantiate the dialog box
        AuthDialog dlg = new AuthDialog(host); // create new dialog with username and password field.

        // Open the dialog box modally 
        dlg.ShowDialog();

        if (dlg.DialogResult == System.Windows.Forms.DialogResult.OK)
        {
            // The user did not cancel out of the dialog. Retrieve the username and password.
            callback.Continue(dlg.UserName,dlg.Password);
            handled = true;
        }

        return handled;
    }
person shyam_    schedule 02.01.2017
comment
откуда класс AuthDialog? Visual Studio не может найти его. - person We are Borg; 04.04.2018