#xamarin #xamarin.forms
#xamarin #xamarin.forms
Вопрос:
У меня есть Xamarin.Формирует приложение с двумя страницами, одна из которых содержит WebView, а другая — просто текст.
Хранилище сеансов теряло данные при переходе между страницами.
//APage.xaml
<WebView x:Name="webView" WidthRequest="1000" HeightRequest="1000" Navigated="webView_Navigated">
<WebView.Source>
<UrlWebViewSource />
</WebView.Source>
</WebView>
//BPage.xaml
<Span Text="Hi B Page"/>
//APage.xaml.cs
...
public BPage()
{
InitializeComponent();
(webView.Source as UrlWebViewSource).Url = "mytestsite.com";
}
private async void webView_Navigated(object sender, WebNavigatedEventArgs e)
{
var webView = sender as WebView;
var token = await webView.EvaluateJavaScriptAsync("window.sessionStorage.getItem('token')");
System.Console.WriteLine(token); //Every time I Go to BPage and back, it is null.
}
Мой веб-сайт возвращает ошибку «Токен не найден в sessionstorage».
Ответ №1:
// Каждый раз, когда я перехожу на страницу B и обратно, оно равно нулю.
Когда вы navigate from B to A
, страница B будет выпущена, и каждый раз, когда вы navigate from A to B
, вы переходите на новую страницу (не одну и ту же страницу каждый раз).
Каждый используемый вами веб-просмотр находится на другой странице B, и именно поэтому вы получаете null.
Вот документ о навигации.
Вы можете использовать Xamarin.Основы: настройки для сохранения токена в приложениях.
Сохранить:
Preferences.Set("my_key", "my_value");
Читать:
var myValue = Preferences.Get("my_key", "default_value");
Комментарии:
1. При навигации я использую AppShell.xaml или
Shell.Current.GoToAsync
. Тогда он не создает экземпляр новой страницы. Он использует ту же страницу. (точка останова в конструкторе просто останавливается один раз. Я обнаружил проблему в github, которая указывает, что это ошибка в github.com/xamarin/Xamarin . Формы / проблемы /90732. Настройки. Set не работает, потому что sessionstorage остается внутри webview.
3. Меняется ли токен каждый раз? Вы можете получить токен и сохранить его с настройками. Устанавливается при выходе со страницы.
4. Как я могу установить токен в webview? Я считаю, что с помощью javascript, но это не кажется правильным способом сделать это. в дополнение к токену в хранилище сеансов есть другие данные, такие как токен обновления, утверждения, имя пользователя, лицензия и т. Д. Xamarin не должен удалять хранилище сеансов при переходе между страницами.
5. Ваш случай отличается от проблемы в ссылке проблема при переходе между страницами. Переход к новой страницеb, вероятно, создает новую страницу вместо использования старой страницы. Вы тестируете на Android или iOS?