使用iOS共享/动作扩展来截取主机应用程序的屏幕截图?
问题描述:
我想知道如何使用共享/操作扩展来截取iOS主机应用程序的屏幕截图。使用iOS共享/动作扩展来截取主机应用程序的屏幕截图?
我的使用情况如下:
- 使用Safari浏览器访问一个网页(HTTPS如Gmail)
- 水龙头上的分享按钮,然后选择
- 扩展将采取延长当前网页的屏幕截图
该用例的一个工作示例是Awesome Screenshot iOS app。
我曾试图在一个UIWebView/WKWebkit以下方法
- 重装基本URI(的loadRequest)(将不能访问HTTPS内容,如Gmail)。所以没有做任何重载(真棒截图是不是做BTW一重装)
- 使用的ExtensionPreprocessingJS通过arguments.completionFunction函数来获取DOM内容。我无法在这里提取document.body,尽管我可以通过baseURI获取源代码等loadHTMLString会弄乱表示层。
- 在ExtensionPreprocessingJS用于html2canvas获得的图像,并将其附加到宿主应用程序的网页作为一个孩子,但不知道如何提取它。此外,一些网页(例如Gmail)丢失了图像。
- Mobile Safari没有visibleContentsAsDataURL方法。
我认为一种可行的方法是使用ExtensionPreprocessingJS中的html2canvas,但是如何以某种方式保存该图像?
答
编辑:所以下面的工程在模拟器中,但不是工作在设备上。我目前正在寻找解决方案。
下面是我觉得真棒截图应用程序使用的解决方案:
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上,它负责抓取所有要显示的内容。 –
你解决这个问题? – Andres
@安德烈斯,不是那么......你的想法是什么? –
到目前为止我不知道!我会发布答案如果我找出如何做到这一点! :) – Andres