2

Мне будет интересно узнать, как сделать снимок экрана приложения-хоста iOS с использованием расширения share/action.Сделать снимок экрана с помощью приложения-хозяина с помощью расширений share/action iOS?

Мой случай использования заключается в следующем:

  1. использовать браузер Safari, чтобы получить доступ к веб-страницу (HTTPS, такие как Gmail)
  2. нажмите на кнопку Share и выберите расширение
  3. расширение будет принимать скриншот текущей веб-страницы

Рабочий пример для этого варианта использования: Awesome Screenshot iOS app.

Я попытался следующие методы

  1. перезагружать BaseUri (loadRequest) на UIWebView/WKWebkit (не сможет получить доступ к HTTPS содержимого, такие как Gmail). Поэтому не делать перезагрузки (Awesome Screenshot не делает перезагрузку).
  2. Используется ExtensionPreprocessingJS для получения содержимого DOM через функцию arguments.completionFunction. Я не мог извлечь document.body здесь, хотя я мог бы получить источник и т. Д. LoadHTMLString с baseURI испортит уровень представления.
  3. Используется html2canvas в ExtensionPreprocessingJS для получения изображения и добавления его на веб-страницу хост-приложения в качестве ребенка, но не знает, как его извлечь. Кроме того, изображение потерялось для некоторых веб-страниц, таких как Gmail.
  4. Мобильное Safari не имеет метода visibleContentsAsDataURL.

Я думаю, что жизнеспособным подходом будет использование html2canvas в ExtensionPreprocessingJS, но как мне сохранить это изображение каким-то образом?

+0

вы решить эту проблему ?? – Andres

+0

@ Андрес, не так ... в чем твоя идея? –

+0

До сих пор я понятия не имею! Я отправлю ответ Если я узнаю, как это сделать! :) – Andres

ответ

1

Редактировать: так ниже работает в симуляторе, но не Работает на устройстве. В настоящее время я ищу решение.

Вот решение, что я думаю, что Потрясающие приложение Скриншот использует:

func captureScreen() -> UIImage 
{ 
    // Get the "screenshot" view. 
    let view = UIScreen.mainScreen().snapshotViewAfterScreenUpdates(false) 

    // Add the screenshot view as a subview of the ShareViewController's view. 
    self.view.addSubview(view); 

    // Now screenshot *this* view. 
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0); 
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) 
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    // Finally, remove the subview. 
    view.removeFromSuperview() 

    return image 
} 
+0

спасибо за вашу идею! Из того, что я собрал, основное внимание следует уделять предварительной обработке JS, которая отвечает за захват всего содержимого для отображения. –