Это приложение для macOS, я пытаюсь сделать снимок экрана с полной страницей веб-просмотра, но не могу сделать снимок экрана с полной страницей.
Функция скриншота.
func takescreenshot(
_ webView: WKWebView,
didFinish navigation: WKNavigation!) {
let configuration = WKSnapshotConfiguration()
configuration.afterScreenUpdates = true
webView.takeSnapshot(with: configuration) { (image, error) in
if let image = image {
//Save Image
}
}
}
из ответов, которые я видел здесь решение, кажется, устанавливает смещение прокрутки веб-просмотра, но это доступно только для ios. Это ошибка, которую я получаю:
Значение типа «WKWebView» не имеет члена «scrollView».
Я предполагаю, что проблема вызвана внутренним представлением прокрутки, которое оптимизирует рисование для прокрутки - перерисовывая только те части, которые вскоре станут видимыми.
Чтобы преодолеть это, вы можете временно изменить размер веб-представления до полного содержимого. Я знаю, что это не идеальное решение, но вы можете найти лучшее решение, основанное на этой идее.
webView.evaluateJavaScript("[document.body.scrollWidth, document.body.scrollHeight];") { result, error in
if let result = result as? NSArray {
let orig = webView.frame
webView.frame = NSRect(x: 0, y: 0, width: (result[0] as! NSNumber).intValue, height: (result[1] as! NSNumber).intValue)
let configuration = WKSnapshotConfiguration()
webView.takeSnapshot(with: configuration) { image, error in
if let image = image {
NSPasteboard.general.clearContents()
NSPasteboard.general.setData(image.tiffRepresentation, forType: .tiff)
}
}
webView.frame = orig
}
}
Это совершенно нормально для моего варианта использования. Спасибо!