1

我正在尝试将我的 Backbone 应用程序的 javascript 手动注入 UIWebview(以便在应用程序启动时避免客户端下载 1MB JS 文件)。

下面的代码在应用程序的 DEBUG 版本中运行良好,但一旦构建了 Ad Hoc 版本版本并对其进行测试,应用程序就无法正确加载。我认为这是某个地方的 JS 错误,但我不知道如何调试在发布版本中运行的 UIWebview(据我所知,Safari 开发工具只能在 Debug 中工作)。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Inject the JS
    NSLog(@"Injecting JS 1 from disk");
    NSString *path = [[NSBundle mainBundle] pathForResource:@"backbone_application" ofType:@"js"];
    NSString *code = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSString *jsCode = [NSString stringWithFormat:@"var script=document.createElement('script'); script.type='text/javascript'; script.text=\"%@\"; document.head.appendChild(script);", code];
    [self.webPortal stringByEvaluatingJavaScriptFromString:jsCode]
}

关于为什么这会在 RELEASE 模式下失败的任何想法?关于如何在发布版本中测试 UIWebview javascript 错误的任何建议?

4

3 回答 3

1

对于每种构建模式,您的代码的项目和目标都有设置​​。在我看来,您有一个或多个 DEBUG 模式设置与 RELASE 模式不同。仔细检查是否有任何设置不同,其他证明这一点的方法是在 DEBUG 模式下为 Ad Hoc 分发创建存档(您可以在方案编辑对话框中编辑它。)如果这个新的 .IPA 按预期运行,那么肯定DEBUG/RELEASE 有不同的设置。

希望这可以帮助,

于 2013-08-19T16:26:49.030 回答
1

您是否尝试在调试中打开严格模式?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

于 2013-08-20T14:17:54.973 回答
1

尝试删除以下行:

NSString *jsCode = [NSString stringWithFormat:@"var script=document.createElement('script'); script.type='text/javascript'; script.text=\"%@\"; document.head.appendChild(script);", code];

所以你会有这个:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Inject the JS
    NSLog(@"Injecting JS 1 from disk");
    NSString *path = [[NSBundle mainBundle] pathForResource:@"backbone_application" ofType:@"js"];
    NSString *code = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    [self.webPortal stringByEvaluatingJavaScriptFromString:code]
}
于 2013-08-25T03:08:08.100 回答