Как перехватить, когда пользователь нажимает на ссылку в браузере
Я пытаюсь перехватить нажатие на ссылку в WebBrowser элемент управления. Моя HTML-страница содержит пользовательские ссылки, для некоторых, начиная с shared: / / я хотел бы перехватить, когда пользователь нажмет на него.
на iPhone я бы использовал метод webView:shouldStartLoadWithRequest: navigationType: и посмотрел на выбранный URL.
мне не удалось воспроизвести аналогичное поведение с Silverlight для Windows Phone.
Я что-то делаю например:
{
webBrowser1.Navigating += new EventHandler<NavigatingEventArgs>(webBrowser1_Navigating);
}
void webBrowser1_Navigating(object sender, NavigatingEventArgs e)
{
string scheme = null;
try
{
scheme = e.Uri.Scheme; // <- this is throwing an exception here
}
catch
{
}
if (scheme == null || scheme == "file")
return;
// Not going to follow any other link
e.Cancel = true;
if (scheme == "shared")
{
}
но я предполагаю исключение при чтении некоторых свойств Uri, когда это стандартный Uri с файлом по умолчанию: / / URL Кроме того, событие навигации даже не запускается для ссылок, начинающихся с shared://
теперь, когда я могу захватить нажатие на общий:/ / мне все равно, но, по крайней мере, я хотел бы иметь возможность получить URL, к которому мы собираемся перейти, и отменить операцию по умолчанию для определенного URL.
любые идеи что происходит? Спасибо
изменить: Оказалось, что проблема в том, что событие навигации генерируется только для следующих ссылок: file://, http: / / или mailto:// Атрибуты схемы Uri доступны только для ссылок http:// и mailto://
Итак, что я сделал в конце, это заменить shared: / / link на http://shared/blah ... И я смотрю на URL... Это работает для моей цели. Теперь у меня могут быть ссылки, которые имеют другое действие (например открытие дополнительного окна) в зависимости от ссылок в html.
1 ответов
вот мой окончательный код, если это полезно для кого-то в будущем:
для экрана about я использую html-файл, отображаемый в компоненте WebBrowser. На странице о программе есть ссылка" расскажите своему другу об этом приложении", а также ссылки на внешний веб-сайт. Он также имеет локальные подстраницы.
локальные подстраницы связаны с использованием файла: / / link. Они могут перемещаться внутри компонента WebBrowser. Внешние ссылки открываются извне с помощью Internet Explorer. Рассказывать ваш друг ссылка сделана из http://shared ссылка, которая открывает электронное письмо с предварительно установленной темой и телом. К сожалению, никакая другая схема, кроме стандартных, не используется, поскольку они не вызывают навигационное событие
также есть ссылка поддержки, которая является mailto: / / link и открывает EmailComposeTask
void webBrowser1_Navigating(object sender, NavigatingEventArgs e)
{
String scheme = null;
try
{
scheme = e.Uri.Scheme;
}
catch
{
}
if (scheme == null || scheme == "file")
return;
// Not going to follow any other link
e.Cancel = true;
if (scheme == "http")
{
// Check if it's the "shared" URL
if (e.Uri.Host == "shared")
{
// Start email
EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.Subject = "Sharing an app with you";
emailComposeTask.Body = "You may like this app...";
emailComposeTask.Show();
}
else
{
// start it in Internet Explorer
WebBrowserTask webBrowserTask = new WebBrowserTask();
webBrowserTask.Uri = new Uri(e.Uri.AbsoluteUri);
webBrowserTask.Show();
}
}
if (scheme == "mailto")
{
EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.To = e.Uri.AbsoluteUri;
emailComposeTask.Show();
}
}