我想知道如何使用共享/操作扩展来截取 iOS 主机应用程序的屏幕截图。
我的用例如下:
- 使用Safari浏览器访问网页(https如gmail)
- 点击共享按钮并选择扩展程序
- 该扩展程序将截取当前网页的屏幕截图
此用例的一个工作示例是很棒的 iOS 屏幕截图应用程序.
我尝试过以下方法
- 在 UIWebView/WKWebkit 上重新加载 baseURI (loadRequest)(将无法访问 Gmail 等 https 内容)。所以不进行任何重新加载(很棒的屏幕截图没有进行重新加载顺便说一句)
- 使用ExtensionPreprocessingJS通过arguments.completionFunction函数获取DOM内容。尽管我可以获取源等,但我无法在这里提取 document.body。带有 baseURI 的 loadHTMLString 会弄乱表示层。
- 在 ExtensionPreprocessingJS 中使用 html2canvas 来获取图像并将其作为子项附加到主机应用程序的网页,但不知道如何提取它。此外,某些网页(例如 Gmail)的图像丢失了。
- Mobile Safari 没有visibleContentsAsDataURL 方法。
我认为一个可行的方法是在 ExtensionPreprocessingJS 中使用 html2canvas 但如何以某种方式保存此图像?
编辑:所以下面的内容在模拟器中有效,但确实如此not在设备上工作。我目前也在寻找解决方案。
我认为 Awesome Screenshot 应用程序使用了以下解决方案:
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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)