2014-02-26 70 views
0

我想讓我的UIwebview在點擊鏈接時觸發文件的下載......它只是在webview中打開它,即它呈現文件的內容, JSON字符串。UIWebView從<a href=myFileName.myFileType>下載

  • 我註冊了mimetype。我曾嘗試將 下載=「target.myfiletype」添加到錨標記,但它仍然只是 在UIWebview中呈現內容(json)。

  • 當我把它在它只是在正確的應用程序打開的電子郵件,因爲我希望它...

    如何讓我的一個UIWebView(這是在相同的應用程序)觸發開放 文件在我的應用程序中,與電子郵件處於同一個莊園嗎?

文件部分的電子郵件來源是這樣的:

... 
--Apple-Mail-38441BAA-F4DD-4BF1-B2CC-9AF9C829566A 
Content-Type: application/myfiletype; 
    name="ExtremeSomething" 
Content-Disposition: attachment; 
    filename="ExtremeSomething" 
Content-Transfer-Encoding: 7bit 

{ 
//FILECONTENT 
} 
... 

我的應用程序通過這本書實現了文件加載,當我在一封電子郵件中點擊一個文件時,它的工作原理:

-(BOOL) application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

    if (url != nil && [url isFileURL]) { 
     [self loadFile:url]; 
    } 
    return YES; 
} 

我試圖重寫shouldStartLoadWithRequest具有負的返回值:

//Load initial page: 
-(void) viewDidAppear:(BOOL)animated{ 
    NSString *urlString = [NSString stringWithFormat:@"%@", @"http://users.student.lth.se/et08dc0/getWork.html"]; 
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]]; 
    loadedNowDownloadMode = NO; 
} 

//Resort to download move where all <a> clicks result in downloads: 
- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    loadedNowDownloadMode = YES; 
} 

//Logic for overriding shouldStartLoadWithRequest: 
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request 
navigationType:(UIWebViewNavigationType)navigationType { 
    //Handle the download... 
    NSURL* url = [[NSURL alloc] initWithString:[[request URL] absoluteString]]; 
    [DELEGATE loadFile:url]; 

    //Prevent page load 
    return !loadedNowDownloadMode; 
} 

在課堂上由宏觀委託引用:

-(void) loadFile:(NSURL*)url{ 
    NSError *error; 
    NSString *jsonString = [[NSString alloc] 
            initWithContentsOfURL:url 
            encoding:NSUTF8StringEncoding 
            error:&error]; 
    if (jsonString == nil) { 
     NSLog(@"Error reading file at %@\n%@", 
       url, [error localizedFailureReason]); 
     return; 
    } 
    NSLog(@"Should load file!"); 
    [self.coreDataHelper importNSData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]]; 
    [((ListViewController*)listsViewController) reloadTableData]; 

} 

回答

1

您可以處理webView:shouldStartLoadWithRequest:navigationType:委託方法的具體網址,返回NO和開放的內容在你的應用

+0

如果我只設置不返回它無法打開鏈接我點擊所有,不在視圖中不下載...更多東西? (查看更新的答案) –

+0

在返回NO之前,您需要將URL放在處理它的代碼中,應該與AppDelegate中的相同 – sage444

+0

我通過調用相應的委託方法更新了我的答案:) Works! –