im 开发一个应用程序,需要加载一些菜单和演示文稿(pdf,flash等(菜单项从数据库加载,每个菜单项都包含 ID 和文本。菜单项如下所示:
番红花素组合火焰
上面的菜单项是超链接,单击它们将在同一页面上打开演示文稿。
在这种情况下,我需要调用一个 Xcode 方法,该方法可以查询数据库(位于应用程序的文档文件夹中(并返回演示文稿名称和其他一些详细信息。
我在这里遇到了两个问题
1(我遇到了
**– webView:shouldStartLoadWithRequest:navigationType:**
但是此方法返回 BOOL,我想返回包含其他信息的演示文稿
2(不知道如何在同一页面上通过javascript加载演示文稿(在我的应用程序的资源文件夹中(。
任何建议将不胜感激。提前谢谢。
你几乎可以在webView:shouldStartLoadWithRequest:navigationType
做你需要做的事情。
-
如果从中返回
NO
,则 Web 视图将不会加载当前请求;这将使您的应用无需执行任何需要的操作: -
然后,您可以在同一 Web 视图中加载不同的请求(例如嵌入演示文稿资源的 HTML 字符串(,
-
或者,您可以向某个控制器发送消息以完全运行不同的工作流(显示不同类型的视图或其他(。
编辑:
阐述更多选项2:
-
假设您有一个嵌入 UIWebView 并充当其委托的视图控制器;
-
您可以在视图控制器中定义一个方法,该方法获取和HTML字符串并将其加载到Web视图中,如下所示:
- (void)loadContentInWebView:(NSString*)content { [_webView loadHTMLString:content baseURL:nil]; }
-
现在,在
webView:shouldStartLoadWithRequest:navigationType
中,您可以执行以下操作:- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { if ([[[request URL] absoluteString] isEqual:WHATEVER]) { [self loadContentInWebView:HERE_THE_HTML]; return NO; } return YES; }
您应该在此处定义:
([[[request URL] absoluteString] isEqual:WHATEVER])
即,理解用户何时触摸某个应该加载演示文稿的链接的逻辑;
和:
[self loadContentInWebView:HERE_THE_HTML];
即,以某种方式定义要使用的HTML内容,以便显示演示文稿。
我得到了一个解决方法。虽然这不是一个好的做法:
在模型中:每当收到对此 Web 视图的请求时,即使页面在 Web 视图中加载,也会调用此方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
// check the request, if it's ajax callback, just return NO; other wise YES;
// NSURLRequest *request = [self request];
NSURL *url = [request URL];
NSString *file = [url lastPathComponent];
if ([file isEqualToString:@"Presentation.html"] == YES) {
return YES;
}
if ([file isEqualToString:@"ajaxcallback.htm"] == YES) {
// that means the ajax call is done, so you can call this
NSString *result = [web stringByEvaluatingJavaScriptFromString:@"getResponse();"];
// don't forget to stop loading this fake page
return NO;
}
}
在 JavaScript 中:
function sendRequestToApp(){
window.location="http://www.domain.com/ajaxcallback.htm";
}
function getResponse(src){
alert("response");
document.getElementById("sample").src=src;
}