Как в Awesomium повесить event на каждый клик на ссылку?

В старом Awesomium? (нового вроде пока нет для .NET)
Он ж давно умер, вместо него лучше что-то на основе CEF (CefGlue, CefSharp, …).
хз даже где сейчас его документацию найти.

ну так то да … но проект то уже работает на авесомиуме. никто не горит желанием спонсировать перевод на новый функционал.

Если ссылки в новом окне открываются (они по умолчанию вроде никак не откроются), то можно ловить их в ShowCreatedWebView как тут или в оф. примерах (кстати, скачать Awesomium с документацией и примерами можно тут в веб-архиве).

Если надо просто знать о переходе без возможности прервать и т.п. — AddressChanged.

Если не в новом окне и надо прерывать — скорее всего ResourceInterceptor.

там даже не ссылки а переходы по параграфам. адрес не срабатывает. webview только один раз создается и дальше не меняется и не срабатывает также евент.

Должно работать если адрес меняется, например, как при <a href="#some_section_id">.

Покажите код ссылок или адрес сайта с ними )

Вот так оглавление выглядит

<li class="liMenu"><span class="folder"><a target="mainFrame" href="1.2.html#Par101">Раздел 1</a></span></li>

А вот так в основной странице

<div class="s2B aC bH" ><a id="Par101"></a>Раздел</div>

То есть никаких новый окон не открывается. Изначально все загружается а дальше просто навигация по страницу.

А, если во фрейме, то да, сложнее, потому что адрес основной страницы не меняется же.

Как вариант можно так:

        private void Log(string text)
        {
            lstLog.Items.Insert(0, text);
        }

        private void LoadWebsiteWithFrames()
        {
            File.WriteAllText("index.html", @"<!DOCTYPE html>
<html lang=""en"">
<head>
    <meta charset=""UTF-8"">
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <td width=""200px"">
            <iframe src=""list_frame.html"" name=""list_frame""></iframe>
        </td>
        <td width=""100%"">
            <iframe src=""page1.html"" name=""content_frame""></iframe>
        </td>
    </tr>
</table>
</body>
</html>");
            File.WriteAllText("list_frame.html", @"<!DOCTYPE html>
<html lang=""en"">
<head>
    <meta charset=""UTF-8"">
    <title>List</title>
</head>
<body>
<ul>
    <li><a href=""page1.html"" target=""content_frame"">Page 1</a></li>
    <li><a href=""page2.html"" target=""content_frame"">Page 2</a></li>
</ul>
</body>
</html>");
            File.WriteAllText("page1.html", @"<!DOCTYPE html>
<html lang=""en"">
<head>
    <meta charset=""UTF-8"">
    <title>Page 1</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>");
            File.WriteAllText("page2.html", @"<!DOCTYPE html>
<html lang=""en"">
<head>
    <meta charset=""UTF-8"">
    <title>Page 2</title>
</head>
<body>
<h1>World</h1>
</body>
</html>");
            webControl1.Source = new Uri(Environment.CurrentDirectory + "/index.html");
        }
        public Form1()
        {
            InitializeComponent();

            webControl1.ViewType = Awesomium.Core.WebViewType.Offscreen;

            LoadWebsiteWithFrames();

            webControl1.MouseClick += (o, e) =>
            {
                if (webControl1.HasTargetURL && e.Button == MouseButtons.Left)
                {
                    Log("Clicked " + webControl1.TargetURL.ToString());
                }
            };
            webControl1.KeyUp += (o, e) =>
            {
                if (webControl1.HasTargetURL && e.KeyCode == Keys.Enter)
                {
                    Log("Clicked via keyboard " + webControl1.TargetURL.ToString());
                }
            };
        }


Еще по идее можно примерно так:

            webControl1.LoadingFrameComplete += (o, e) =>
            {
                if (e.IsMainFrame)
                {
                    JSObject linkClickHandler = webControl1.CreateGlobalJavascriptObject("linkClickHandler");
                    linkClickHandler.Bind("handle", (s, ev) =>
                    {
                        string url = ev.Arguments[0].ToString();
                        Log("Clicked " + url);
                        return null;
                    });
                }
                if (e.OriginalString.EndsWith("list_frame.html"))
                {
                    webControl1.ExecuteJavascript(@"
                        <подписаться на события клика <a> и т.п.>
                        linkClickHandler.handle('url'));
                        ",
                        "//*[@name='list_frame']");
                }
            };

но чот не работает из фрейма даже с

            webControl1.WebSession = WebCore.CreateWebSession(new WebPreferences
            {
                WebSecurity = false
            });

Может быть есть способы проще, я Awesomium в основном использовал не для такого взаимодействия, а для автоматизации действий на сайте (потом перешел на Selenium и стало в 100500 раз проще :sweat_smile:).

Заказчик настаивает на поддержке XP. Насколько я читал эти новые платформы уже там не работают.

Какие?

Selenium любые браузеры автоматизирует, но он для автоматизации (боты, …) и автоматических тестов, а не для HTML UI и встраивания браузера в приложение.

А CEF да, примерно с 49 версии Хромиум не поддерживает ХР. Но старая версия CEF думаю таки лучше Авесомиума потому что опен-сорс, есть сообщество, больше шанс получить помощь/исправления и т.д., ну и более новая версия Хромиума (в Awesomium 18 Хромиум).