【问题标题】:Take screenshot of host app using iOS share/action extensions?使用 iOS 共享/操作扩展截取主机应用程序的屏幕截图?
【发布时间】:2015-10-14 07:56:28
【问题描述】:

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

我的用例如下:

  1. 使用 Safari 浏览器访问网页(https,如 gmail)
  2. 点击分享按钮并选择扩展程序
  3. 该扩展程序将截取当前网页的屏幕截图

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

我试过以下方法

  1. 在 UIWebView/WKWebkit 上重新加载 baseURI (loadRequest)(将无法访问 https 内容,例如 Gmail)。所以不做任何重新加载(真棒截图不做重新加载顺便说一句)
  2. 使用 ExtensionPreprocessingJS 通过 arguments.completionFunction 函数获取 DOM 内容。我无法在此处提取 document.body,尽管我可以获得源等。使用 baseURI 的 loadHTMLString 会弄乱表示层。
  3. 在 ExtensionPreprocessingJS 中使用 html2canvas 获取图像并将其作为孩子附加到宿主应用程序的网页,但不知道如何提取它。此外,某些网页(例如 Gmail)的图片丢失了。
  4. Mobile Safari 没有 visibleContentsAsDataURL 方法。

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

【问题讨论】:

  • 你解决了吗??
  • @Andres,不是这样......你的想法是什么?
  • 到目前为止我还不知道!如果我知道该怎么做,我会发布答案! :)
  • @Andres,非常感谢!

标签: swift algorithm ios8-extension ios8-share-extension webpage-screenshot


【解决方案1】:

编辑:所以下面在模拟器中工作,但 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
}

【讨论】:

  • 感谢您的想法!从我收集到的信息来看,重点应该放在负责抓取所有内容进行显示的预处理 JS 上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多