即时开发应用程序,需要加载一些菜单和演示文稿(pdf,flash等) 菜单项从数据库加载,每个菜单项包含ID和文本。菜单项如下所示:
藏红花素 Combiflame
以上菜单项是超链接,点击它们会在同一页面上打开演示文稿。
我需要在这个场景中调用一个xcode方法,它可以查询数据库(位于app中的文档文件夹中)并返回演示文稿名称和其他一些细节。
我在这里遇到两个问题
1)我遇到了
**– webView:shouldStartLoadWithRequest:navigationType:**
但此方法返回BOOL 而我想要返回带有其他信息的演示文稿
2)不知道如何在同一页面上通过javascript加载演示文稿(我的应用程序的资源文件夹内)。
任何建议都将非常感谢。提前谢谢。
答案 0 :(得分:1)
您可以在webView:shouldStartLoadWithRequest:navigationType
中完成所需的工作。
如果您从中返回NO
,那么网络视图将不会加载当前请求;这将使您的应用程序无需做任何需要:
然后您可以在同一个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内容,以便显示该演示文稿。
答案 1 :(得分:0)
我得到了一个解决方案......尽管这不是一个好习惯:
在模型中: 即使在webview中加载页面
,也会在此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;
}