Я пытаюсь перехватить нажатие на ссылку в элементе управления 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
Кроме того, событие Navigating даже не запускается для ссылок, начинающихся с shared: //
Теперь, когда я могу захватить постукивание по общему ресурсу: // Мне все равно, но, по крайней мере, я хотел бы иметь возможность получить URL-адрес, по которому мы собираемся перейти, и отменить значение по умолчанию. операция для определенного URL.
Есть идеи, что происходит?
Спасибо
Edit:
Оказалось, что проблема в том, что событие Navigating генерируется только для следующих ссылок: file: //, http: // или mailto: //
Атрибуты схемы Uri доступны только для http: // и mailto: // links
В итоге я заменил ссылку shared: // на http://shared/blah ... И я смотрю на URL ... Это работает для моих целей. Теперь у меня могут быть ссылки, которые выполняют разные действия (например, открывают дополнительное окно) в зависимости от ссылок в html.