Я пытаюсь сохранить значение из UIWebView в NSUserDefaults и загрузить их, когда мое веб-приложение будет загружено в UIWebView позже.
Я использую шаблон, изложенный в документации Apple.Перехват документа. Изменение местоположения.Я пытаюсь установить глобальную переменную JS в Objc и позже читаю переменную в JS.
Мой код JS в веб-представлении выглядит следующим образом:
AppController.prototype.getUserDefinedLanguage = function() {
var language = undefined;
if (this.isUiWebView()) {
// we are working inside of a TMC WAV
var url = 'tmcwac://loaduserlanguage';
document.location.href = url;
console.log("loading language");
language = app_language;
} else {
// try to use HTML5 localstorage
language = localStorage.getItem("userlanguage");
}
return language;
}
Через делегата я улавливаю изменение document.href:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType (UIWebViewNavigationType)navigationType {
if ([actionType isEqualToString:@"setuserlanguage"]) {
NSString *language = [request.URL.fragment stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:language forKey:@"userlanguage"];
}
if ([actionType isEqualToString:@"loaduserlanguage"]) {
NSString *language = [[NSUserDefaults standardUserDefaults] stringForKey:@"userlanguage"];
if (language == nil) {
language = @"en";
}
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"app_language = '%@'",language]];
}
return NO;
}
Моя проблема в том, что глобальная переменнаяapp_language недоступен.Изменение document.href работает асинхронно.так что переменная недоступна при попытке доступа к ней из строки ниже.
Когда я вручную пытаюсь получить доступ к переменной вручную из консоли, она показывает правильное значение.