使用以下操作扩展,我能够获取网页中的图像 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/