是否可以通过共享扩展程序在Safari中执行webview当前可见区域的屏幕截图?我可以使用Windows,但扩展不支持UIApplication,因此我无法访问该窗口。
答案 0 :(得分:2)
你不能,因为无法从扩展程序到达UIApplication。您无法获得第一个UIWindow,即Safari层,因此您必须使用扩展所具有的Javascript预处理文件。因此,只需创建一个Javascript文件,当发送到Safari时,会生成带有当前可见区域图像数据的base64字符串。通过扩展中的kUTTypePropertyList标识符获取该字符串。因为那应该是NSData,使用+imageWithData
从那里生成UIImage。这就是您正在寻找的内容,无需再次加载页面,如果网页需要登录,则可防止出现第二次加载和错误图像。
答案 1 :(得分:0)
据我所知,除非您动态调用所需的API,否则您不能这样做,甚至可能会遇到上下文权限问题和应用商店批准问题。
另一种方法可能是将当前的Safari URL传递给您的扩展,使用隐藏的UIWebView加载它并将此视图渲染为UIImage,但您将丢失当前可见的区域信息......
答案 2 :(得分:0)
编辑:所以下面的工作在模拟器中,但不在设备上工作。我现在也在寻找解决方案。
你不能只获得Safari的可见区域,但你可以获得一点点聪明才智的截图。以下方法从ShareViewController捕获屏幕截图。
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
}
答案 3 :(得分:0)
这是获取共享扩展程序中网页截图的经批准方式:
with open('test.txt', 'r') as f:
content = f.readlines()
output_line = "".join([line.split(':')[1].replace('\n',';').strip() for line in content[0:4]])
print(output_line)