Obj-c - 在 UIWebView 中打开 PDF?

Obj-c - Opening PDF in UIWebView?

我正在尝试在 UIWebView 中打开 PDF。出于某种原因,当我从 NSString 中拉出 URL,然后在我的代码中使用 NSString 时,webview returns 为空(即使字符串包含 url数据)。但是,如果我将 URL 键入 URLWithString IN FULL(例如 example.com/file.pdf),PDF 将按原样显示。也就是说,显示的 PDF link 始终不同,这就是为什么我使用 NSString 来填充 UIView 的 PDF link。知道为什么这不起作用吗?

ViewController.m

NSString *browserLink = self.linkProgram[@"body"];
NSURL *url = [NSURL URLWithString:browserLink];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];

有时 URL 已损坏或其中包含 UIWebView 无法识别的字符,因此不会向您显示您感兴趣的 page/PDF。试试这个,使用 stringByAddingPercentEscapesUsingEncoding 尝试删除任何空格并将它们替换为可能在 URL.

中的百分比转义符
NSURL *url = [NSURL URLWithString:
[browserLink stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

这通常有效,但我自己过去也遇到过问题,这并没有解决我的问题。相反,我使用 stringByReplacingOccurrencesOfString 方法来替换字符。

NSURL *url = [NSURL URLWithString: 
[browserLink stringByReplacingOccurrencesOfString: @" " withString:@"%20"]];

编辑

布列塔尼 App Transport Security 你的问题。确保您的 info.plist 文件包含以下密钥以应用您的 ATS 设置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>pdfpdf.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

通过此更改,以下代码将为您工作。

NSString *browserLink = self.linkProgram[@"body"];
NSURL *url = [NSURL URLWithString:browserLink];
UIWebView * webView = [[UIWebView alloc] initWithFrame: self.view.frame];
[self.view addSubview:webView];
[webView loadRequest:[NSURLRequest requestWithURL:url]];

结果

我是这样用的 -

#import <WebKit/WebKit.h>


NSString *urlString = _datadiction[@"doclink"];

    if(urlString != nil || [urlString isEqualToString:@""]){

        WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
        WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
        NSURLRequest *nsrequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

        [webView setBackgroundColor:[UIColor whiteColor]];

        [webView loadRequest:nsrequest];
        [self.view addSubview:webView];

    }
    else{

        NSLog(@"Error");
    }

#P.S -  Update info.plist with Transport Security... (allow arbitary loads = YES)