UIWebview在页面上执行注入的JavaScript后的屏幕截图
UIWebview Screen Shot after executing injected JavaScript on the page
处理以下问题的最佳方法是什么?我有一个带有一些JavaScript的HTML页面,我将其加载到UIWebview控件中。我想在页面上调用一个 js 函数来改变 DOM,在 DOM 突变之后,我想捕获网页的屏幕截图。我面临的问题是从UIWebview捕获的图像不代表html页面的当前状态。它表示从下面调用[myWebview stringbyevaluatingjavascriptfromstring:@"myHandle.func()"];
之前的 DOM 状态。
[myWebview stringbyevaluatingjavascriptfromstring:@"myHandle.func()"];
UIGraphicsBeginImageContext(myWebview .bounds.size);
[myWebview .layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我认为问题与以下事实有关:本机UI更新直到当前运行循环结束才更新。因此,UIWebView 不反映屏幕捕获点 DOM 的当前状态。
我已经设法通过以下两种方法获得了我寻求的功能。在之后立即调用两者
[myWebview stringbyevaluatingjavascriptfromstring:@"myHandle.func()"];
1.
[self performSelector:@selector(createWebviewImage) withObject:nil afterDelay:0]
其中createWebViewImage
只是持有以下逻辑
UIGraphicsBeginImageContext(myWebview .bounds.size);
[myWebview .layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
阿拉伯数字。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Back to the main thread for a chunk of code
dispatch_sync(dispatch_get_main_queue(), ^{
[self createWebviewImage];
});
});
这两种方法在我的小型测试用例中确实有效,尽管我对使用它们感到非常担心,因为我担心它们可能会失败。
感谢问题 https://stackoverflow.com/a/26301724/680778
以下是我能够想到的最好的方法
CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, kCFRunLoopAfterWaiting, NO, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity)
{
[self createWebviewImage];
});
CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);
这种方法将观察器添加到要在 kCFRunLoopAfterWait 阶段执行的主运行循环中,如参考中所述,所有 UI 操作都在 kCFRunLoopBeforWait 阶段执行。希望这对其他人有所帮助。
相关文章:
- 获取屏幕截图并在电子邮件中发送的按钮
- 如何使用selenium和同步JS进行屏幕截图
- 使用javascript api创建youtube的屏幕截图
- 删除闪烁的光标进行网络屏幕截图测试
- 如何在html和javascript中捕捉聚合物元素的屏幕截图
- UIWebview在页面上执行注入的JavaScript后的屏幕截图
- 如何使用JavaScript拍摄部分谷歌地图的屏幕截图
- 如何使用javascript或jquery获取网页的屏幕截图
- 将谷歌地图另存为图像 - 使用javascript(能够截取屏幕截图)
- html2canvas可以捕获javascript 3d“屏幕截图”吗?
- 如何使用JavaScript拍摄HTML5视频的不同屏幕截图
- 如何捕获客户端部分的屏幕截图“;桌面;使用HTML/JavaScript
- 如何使用javascript+php捕获部分屏幕截图
- 使用javascript捕获桌面屏幕截图
- python屏幕截图opsview-避免在过时的无头服务器上使用javascript
- 使用MediaStream API在javascript中捕获屏幕截图或共享实时屏幕
- 没有服务器端代码的.net中的javascript屏幕截图
- 用Javascript截取一个单页应用程序的屏幕截图
- 使用 JavaScript 的屏幕截图
- 我如何在chrome扩展中使用javascript截取一些特定区域的屏幕截图