我试图将UIWebView中的值存储在NSUserDefaults中,并在稍后将我的Web应用程序加载到UIWebView中时加载它们。
我使用Apple文档中概述的模式。拦截document.location更改。我尝试在Objc中设置一个全局JS变量,然后在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;
}
通过代表我抓住了文档。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更改似乎异步工作。这样,当尝试从下面的行访问该变量时就无法访问该变量。
当我手动尝试从控制台手动访问变量时,它显示正确的值。