#cefsharp
#cefsharp
Вопрос:
Я использую CefSharp (86.0.241) в WPF.Приложение NET Framework (4.7.2; x64) для отображения HTML из строки (не URL; см. «Редактировать 1»). Клики по гиперссылкам не должны инициировать переход к другому контенту, но должны обрабатываться приложением для выполнения других действий, таких как открытие системного веб-браузера по умолчанию или отображение информации в пользовательском интерфейсе приложения.
Я назначаю объект пользовательского IRequestHandler
класса для ChromiumWebBrowser.RequestHandler
выполнения перехвата запроса. В реализациях метода IRequestHandler
я могу отменить навигацию и делать свое дело. Это отлично работает для ссылок с подобной схемой <a href="http://mynetwork/share/index.html">Click</a>
.
Но если есть ссылки без схемы (например <a href="www.google.com">Click</a>
) или относительные ссылки (например <a href="/tmp/index.php">Click</a>
) IRequestHandler.OnDocumentAvailableInMainFrame
, элемент управления CefSharp вызывает только реализацию метода. Это указывает на то, что новый контент создан (навигация выполнена). На самом деле визуальное содержимое элемента управления исчезает. В этом случае я не могу перехватывать запросы с моей IRequestHandler
реализацией.
Итак, каков правильный способ перехватывать запросы ссылок без схемы?
Спасибо
Редактировать 1: чтобы быть более точным, я загружаю HTML из URI данных. Вместо того, чтобы использовать методы LoadHtml
-extension, я генерирую их самостоятельно (например data:text/html;charset=utf-8;base64,PGh0bWwvPg==
, и вызываю ChromiumWebBrowser.Load(string url)
с ним метод экземпляра.
Редактировать 2: если я использую обычный веб-сайт, например https://magpcss.org/ceforum / IRequestHandler
методы вызываются так, как и ожидалось. Например, ссылка «Команда» в нижнем колонтитуле является относительной в HTML-коде. Я могу отменить навигацию и сделать что-то еще с URL. Url
Свойство в IRequest request
аргументе IRequestHandler.OnBeforeBrowse
содержит абсолютный URL-адрес со схемой, доменом и т.д. на страницу команды.
Комментарии:
1. Похоже на ошибку во встроенном фреймворке chromium. Cefsharp — это всего лишь одна из многих встроенных оболочек фреймворка chromium. Если вы разместите на magpcss.org/ceforum/viewforum.php?f=18 те, кто связан с CEF, могут быть вовлечены в обсуждение.
2. Как именно вы загрузили html?
3. Работает ли это, если вы используете обычный веб-сайт с соответствующими ссылками? URI данных является особым случаем и, вероятно, потребует изменений chromium, поэтому вряд ли будет исправлен. Если это работает для обычных URL-адресов, вы можете переключиться на использование обработчика ресурсов или фабрики обработчиков scheme.
4. Поскольку это работает, как и ожидалось, для обычных URL-адресов, вам придется переключиться с использования uri данных, скажем, ResourceHandler. Смотрите github.com/cefsharp/CefSharp/wiki /… для общего обзора. Вызов cefsharp.github.io/api/86.0.x/html /… с вашим HTML и URL-адресом — это самый простой вариант.
5. @amaitland: Вы правы. Использование метода
LoadHtml
расширения с подобным URLzack://www.example.com
работает. Метод регистрирует значение по умолчаниюResourceHandler
с моим новым базовым URL и моей HTML-строкой. Затем все ссылки без схемы добавляются новым базовым URL-адресом в аргументах реализацийIRequestHandler
метода. Итак, я могу обрабатывать эти клики и навигации соответственно. Спасибо!