2016-05-09 8 views
1

Используя следующее расширение действия, я могу получить URL-адреса изображений на веб-странице. Однако, когда URL-адрес для файла PDF, то ничего. Список свойств - nil.Расширение действия Safari iOS kUTTypePropertyList is nil

У меня есть следующий файл 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-изображения. Однако, когда страница является URL-адресом для файла PDF, тогда ничего. Список свойств - nil.

Если я пытаюсь без js, то я получаю public.url.

Но, с JS, список свойств равно нулю ...

Любая помощь приветствуется. Благодаря

ответ

0

несколько вещей:

  • По умолчанию, если ваши свойства расширения устанавливаются NSExtensionActivationSupportsWebURLWithMaxCount в info.plist> NSExtension> NSExtensionAttributes> NSExtensionActivationRule вы получите URL по умолчанию. Установите его в NSExtensionActivationSupportsWebPageWithMaxCount взаимодействовать с DOM
  • Cast 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, 
        } 
       } 
      })