使用iOS共享/动作扩展来截取主机应用程序的屏幕截图?

问题描述:

我想知道如何使用共享/操作扩展来截取iOS主机应用程序的屏幕截图。使用iOS共享/动作扩展来截取主机应用程序的屏幕截图?

我的使用情况如下:

  1. 使用Safari浏览器访问一个网页(HTTPS如Gmail)
  2. 水龙头上的分享按钮,然后选择
  3. 扩展将采取延长当前网页的屏幕截图

该用例的一个工作示例是Awesome Screenshot iOS app

我曾试图在一个UIWebView/WKWebkit以下方法

  1. 重装基本URI(的loadRequest)(将不能访问HTTPS内容,如Gmail)。所以没有做任何重载(真棒截图是不是做BTW一重装)
  2. 使用的ExtensionPreprocessingJS通过arguments.completionFunction函数来获取DOM内容。我无法在这里提取document.body,尽管我可以通过baseURI获取源代码等loadHTMLString会弄乱表示层。
  3. 在ExtensionPreprocessingJS用于html2canvas获得的图像,并将其附加到宿主应用程序的网页作为一个孩子,但不知道如何提取它。此外,一些网页(例如Gmail)丢失了图像。
  4. Mobile Safari没有visibleContentsAsDataURL方法。

我认为一种可行的方法是使用ExtensionPreprocessingJS中的html2canvas,但是如何以某种方式保存该图像?

+0

你解决这个问题? – Andres

+0

@安德烈斯,不是那么......你的想法是什么? –

+0

到目前为止我不知道!我会发布答案如果我找出如何做到这一点! :) – Andres

编辑:所以下面的工程在模拟器中,但不是工作在设备上。我目前正在寻找解决方案。

下面是我觉得真棒截图应用程序使用的解决方案:

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上,它负责抓取所有要显示的内容。 –