iOS Safari Action Extension kUTTypePropertyList为nil

时间:2016-05-09 16:35:43

标签: ios swift action extension-methods safari-extension

使用以下操作扩展程序,我可以在网页中获取图片网址。但是,当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")
        }
        })
}

我可以获取图片网址。但是,当页面是PDF文件的URL时,则没有。物业清单是零。

如果我尝试没有js,那么我得到了public.url。

但是,使用js,属性列表是nil ...

感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:0)

一些事情:

  • 默认情况下,如果您的扩展程序属性在Info.Plist&gt;中设置为NSExtensionActivationSupportsWebURLWithMaxCount NSExtension&gt; NSExtensionAttributes&gt; NSExtensionActivationRule默认情况下将获取URL。将其设置为NSExtensionActivationSupportsWebPageWithMaxCount以与DOM交互
  • item的回调中投放NSDictionary并按如下方式访问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,
                    }
                }
            })