我的一个项目有一个 Web 视图,用于托管 HTML5 网络游戏(包含在应用程序包中)。我遇到了一个奇怪的问题。游戏通过开放的 URL 调用与宿主应用程序进行通信(详见以下问题:UINavigationController 和加载在 UIWebView 中的网页之间是否可以通信?)。我在 Web 视图的委托中覆盖了以下方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *requestURL = [request URL];
NSString *host = [requestURL host];
if([host isEqualToString: @"printHello"])
{
NSLog(@"Hello!");
return NO;
}
return YES;
}
这适用于第一次调用(例如 document.location(my-app-scheme://printHello)),然后是 Hello!确实已登录到应用程序的运行控制台。但是,尝试立即调用完全相同的第二个加载 URL 将被忽略。
我已经通过确保 webview 和应用程序之间的任何通信仅在单个调用中发生来解决这个问题,但这被证明是非常严格的 - 有没有更好的策略来解决这个问题?