0

我正在开发一个应用程序,它需要加载一些菜单和演示文稿(pdf、flash 等) 菜单项是从数据库加载的,每个菜单项都包含 ID 和文本。菜单项如下所示:

藏红花组合火焰

上面的菜单项是超链接,单击它们将在同一页面上打开演示文稿。

在这种情况下,我需要调用一个 xcode 方法,该方法可以查询数据库(位于应用程序的文档文件夹中)并返回演示名称和其他一些详细信息。

我这里有两个问题

1)我遇到了

**– webView:shouldStartLoadWithRequest:navigationType:**

此方法返回 BOOL,我想返回 Presentation 和其他信息

2)不知道如何通过 javascript 在同一页面上加载演示文稿(在我的应用程序的资源文件夹内)。

任何建议将不胜感激。提前致谢。

4

2 回答 2

1

您几乎可以在webView:shouldStartLoadWithRequest:navigationType.

  1. 如果NO从它返回,那么 web 视图将不会加载当前请求;这将使您的应用程序无需执行任何操作:

  2. 然后,您可以在同一个 Web 视图中加载不同的请求(比如嵌入演示资源的 HTML 字符串),

  3. 或者,您可以向您的某个控制器发送消息以完全运行不同的工作流程(显示不同类型的视图或其他)。

编辑:

详细说明更多选项2:

  1. 假设您有一个嵌入 UIWebView 并充当它的委托的视图控制器;

  2. 您可以在视图控制器中定义一个方法,该方法获取 HTML 字符串并将其加载到 Web 视图中,如下所示:

    - (void)loadContentInWebView:(NSString*)content {
         [_webView loadHTMLString:content  baseURL:nil];
    }
    
  3. 现在,在 中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 内容,以便显示演示文稿。

于 2012-05-10T07:54:15.720 回答
0

我有一个解决方法..虽然这不是一个好习惯:

在模型中: 只要有对此 webview 的请求,即使页面在 webview 中加载,也会调用此方法

- (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;
    }
于 2012-05-11T04:07:32.413 回答