Estoy escribiendo una extensión de acción para transformar la URL de una imagen y copiarla en el portapapeles haciendo clic en el botón Compartir de una imagen en una página web en Safari.
Creé una extensión de acción en Xcode sin interfaz de usuario.
En el script de preprocesamiento de javascript action.js , puedo obtener la URL y el título de toda la página.
run: function(arguments) { arguments.completionFunction({ "URL" : document.URL, "title": document.title }) },Y eso funciona para el botón de compartir de toda la página web.
Pero, ¿cómo puedo obtener la URL de la imagen que se envía?
Cuando usa from URL, es mejor usar from :
pod 'SDWebImage'esto es mejor debido al caché
puede establecer su cadena de URL con el siguiente código:
libraryImageView.sd_setImage(with: URL(string: "your URL string"), placeholderImage: UIImage(named: Image.placeholder.rawValue))después de eso, puede obtener la URL con el siguiente código:
libraryImageView.sd_ImageURLRespondiendo a mi propia pregunta. Tuve que crear una extensión de acción con la interfaz de usuario para poder trabajar dentro de la clase ActionViewController: UIViewController . El truco es buscar UTType.url.identifier a través de los elementos compartidos.
El siguiente código funciona para el botón de compartir de toda la página web y una imagen.
override func viewDidLoad() { super.viewDidLoad() // search for url var found = false for item in self.extensionContext!.inputItems as! [NSExtensionItem] { for provider in item.attachments! { if provider.hasItemConformingToTypeIdentifier(UTType.url.identifier) { provider.loadItem(forTypeIdentifier: UTType.url.identifier, options: nil, completionHandler: { (url, error) in OperationQueue.main.addOperation { if let url = url as? URL { // do something with the url here } }}) found = true break } } if (found) { // We only handle one url, so stop looking for more. break } } // don't show user interface self.done() }