iOS Safari Action 扩展 kUTTypePropertyList 为零

标签 ios swift action extension-methods safari-extension

使用以下操作扩展,我能够获取网页中的图像 URL。但是,当 URL 用于 PDF 文件时,则什么也没有。属性列表为零。

我有以下扩展的 js 文件:

var GetImage = function() {};

GetImage.prototype = {
    imageURLs: function() {
        var imgs = document.getElementsByTagName("img");
        var imgSrcs = [];

        for (var i = 0; i < imgs.length; i++) {
            imgSrcs.push(imgs[i].src);
        }

        return imgSrcs;
    },
    run: function(arguments) {
        arguments.completionFunction({
                                     "currentUrl": document.URL,
                                     "currentTitle": document.title,
                                     "content": document.body.innerHTML,
                                     "images": this.imageURLs(),
                                     });
    }
};

var ExtensionPreprocessingJS = new GetImage;

然后,在实际操作中:

print("step a-1")
let item : NSExtensionItem = extensionContext!.inputItems[0] as! NSExtensionItem
let itemProvider : NSItemProvider = item.attachments?.first as! NSItemProvider

let propertyList = String(kUTTypePropertyList)

if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
    print("step a-2")

    itemProvider.loadItemForTypeIdentifier(propertyList, options: nil, completionHandler: { (item, error) -> Void in
        if (item != nil) {
            print("step a-3")
        }
        })
}

我能够获取图像 URL。但是,当页面是 PDF 文件的 URL 时,则什么也没有。属性(property) list 为零。

如果我尝试不使用 js,那么我会得到 public.url。

但是,对于 js,属性列表是 nil...

感谢任何帮助。 谢谢

最佳答案

一些事情:

  • 默认情况下,如果您的扩展属性在 Info.Plist > NSExtension > NSExtensionAttributes > NSExtensionActivationRule 中设置为 NSExtensionActivationSupportsWebURLWithMaxCount,您将默认获得 URL。将其设置为 NSExtensionActivationSupportsWebPageWithMaxCount 以与 DOM 交互
  • NSDictionary 的回调中转换 item 并访问它的 NSExtensionJavaScriptPreprocessingResultsKey 如下
itemProvider.loadItem(forTypeIdentifier: propertyList, options: nil, completionHandler: { (item, error) -> Void in
                guard let dictionary = item as? NSDictionary else { return }
                OperationQueue.main.addOperation {
                    if let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary,
                        let urlString = results["currentURL"] as? String,
                    }
                }
            })

关于iOS Safari Action 扩展 kUTTypePropertyList 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120984/

相关文章:

objective-c - 仅调整 UIWebView 的内容大小/适合内容?

swift - 在 Swift : as? 类型中向下转换可选值,或作为!类型?

ios - 使用 ARKit 的面部和相机之间的距离

c# - 动态创建类型

Android - 图像选择器,错误的图像

ios - 如何在 "*****"之类的 UITextField 中隐藏密码?

iOS - 具有自定义字体和动态大小的 UILabel

ios - SKStoreReviewController requestReview() 如果用户对应用进行评分,系统将永远不会提示他对我们进行评分吗?

ios - Tableview Cell 无法正确显示

android - 多个 Intent 接收器?