【问题标题】:App Transport Security on Safari ExtensionSafari 扩展上的应用程序传输安全性
【发布时间】:2015-09-07 16:03:58
【问题描述】:

我的应用程序扩展需要从许多网站打开 URL。我这样做:

for (NSExtensionItem *item in self.extensionContext.inputItems) {

    for (NSItemProvider *itemProvider in item.attachments) {

        if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {

            [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) {
                NSLog(@"URL: %@",url);

我可以获取网址,但此时我收到此错误:

App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用的 Info.plist 文件配置临时例外。

我试图完全关闭 ATS,

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key> <true/>
    </dict>

但它不起作用,我无法在 NSExceptionDomain 中列出网站。我在模拟器和设备上试过。有人可以帮忙吗?

编辑

我认为导致问题的代码是这样的:

NSString* htmlString = [NSString stringWithContentsOfURL: url encoding:NSUTF8StringEncoding]

我在 url 日志之后使用这行代码来获取纯文本的 html。

【问题讨论】:

    标签: ios objective-c nsstring nsurl ios9


    【解决方案1】:

    您是将NSAppTransportSecurity 字典添加到应用扩展的Info.plist 文件中,还是仅添加到父应用的Info.plist 文件中?因为如果扩展程序发出请求,则异常需要在扩展程序的 Info.plist 文件中。

    如果这没有帮助,请尝试直接使用NSURLConnection,看看是否有任何不同。我怀疑它会,但它可能值得一试。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但是将 NSAllowsArbitraryLoads 设置为 YES 为我解决了这个问题。我建议尝试:

      NSError *error;
      
      NSStringEncoding encoding;
      
      NSString *content = [NSString stringWithContentsOfURL:contentURL usedEncoding:&encoding error:&error];
      

      *请注意,我使用 usedEncoding 而不是 encoding。

      这将允许您收到错误并查看最佳编码是什么。可能是您使用了错误的编码,或者您传递的文件无法解码;即 .mp4、.m4a 和 .mp3 文件不起作用,但 .m3u8 可以。

      【讨论】:

      • 感谢您的回答,但它对我不起作用。 plist 中的那个值设置为 YES,我尝试了你的方法来获取 html,但它返回 null 给我
      • @Totka 我假设你已经在 ios8 中尝试过这个 url 并且它有效。我发现有时在 http 中添加“s”可以使其在 ios9 上运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 2017-04-26
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多