Я разрабатываю простую страницу UWP
с помощью web view
. Я хотел бы сделать следующее: если щелкнуть внешнюю ссылку, я открою бровер по умолчанию, но если это не внешняя ссылка, я хочу перемещаться по моему web view
и добавлять дополнительные заголовки. Для этого я перекрытая в WebViewNavigationStartingEventArgs событий, это мой код:Универсальная платформа для Windows webView override NavigationStarting
private async void WebView_Navigation_Starting(WebView sender, WebViewNavigationStartingEventArgs args)
{
progressIndicator.Visibility = Visibility.Visible;
args.Cancel = true;
// external URL
if (isExternalUrl(args.Uri.AbsoluteUri))
{
//cancel load
args.Cancel = true;
//launch default browser
await Launcher.LaunchUriAsync(args.Uri);
progressIndicator.Visibility = Visibility.Collapsed;
}
else
{
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, args.Uri);
foreach (KeyValuePair<String,String> header in additionalHeaders) {
httpRequestMessage.Headers.Add(header);
}
webView.NavigateWithHttpRequestMessage(httpRequestMessage);
}
progressIndicator.Visibility = Visibility.Visible;
}
В версии Android
это делается так:
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
if (isExternalUrl(url)) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
tvError.setVisibility(View.GONE);
setAdditionalHeaders();
view.loadUrl(url, additionalHeaders);
return true;
}
Но я получаю исключение StackOverflow в этой строке webView.NavigateWithHttpRequestMessage(httpRequestMessage)
. Кто-нибудь знает, что здесь не так?
EDIT
MainPage.xaml:
<Page
x:Class="windows_phone.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="20"
Foreground="#FF000000">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0">
<WebView
x:Name="webView"
Margin="0,0,0,0"
Grid.Row="1"
/>
</Grid>
</Grid>
MainPage.cs:
public MainPage()
{
InitializeComponent();
// webView //
webView.Settings.IsJavaScriptEnabled = true;
webView.ScriptNotify += webView_ScriptNotify;
webView.Source = new Uri(GetUrl("/"));
webView.NavigationStarting += WebView_Navigation_Starting;
webView.NavigationCompleted += WebView_Navigated;
webView.Loaded += WebView_Loaded;
webView.LoadCompleted += WebView_LoadCompleted;
webView.NavigationFailed += Web_View_Navigation_Failed;
}
}
Почему вы вызываете этот webView.NavigateWithHttpRequestMessage, когда он уже начал навигацию? Вы должны удалить этот метод. Если его внешняя ссылка вам не нужна. Или вы должны делать args.Cancel = true; прежде чем вы вызовете этот метод – Archana
Хорошо, вы правы, он удаляется, но когда щелчок по внутренней ссылке приложение ничего не делает, я имею в виду, что я не могу перейти в веб-просмотр. – IrApp
Можете ли вы разместить xaml с внутренней ссылкой? Было бы полезно решить – Archana