簡體   English   中英

在頁面上執行注入的JavaScript后的UIWebview屏幕截圖

[英]UIWebview Screen Shot after executing injected JavaScript on the page

處理以下內容的最佳方法是什么? 我有一個包含一些JavaScript的HTML頁面,並將其加載到UIWebview控件中。 我想在更改DOM的頁面上調用js函數,在DOM更改后,我想捕獲網頁的屏幕截圖。 我面臨的問題是,從UIWebview捕獲的圖像不代表html頁面的當前狀態。 它表示通過調用[myWebview stringbyevaluatingjavascriptfromstring:@"myHandle.func()"];來調用[myWebview stringbyevaluatingjavascriptfromstring:@"myHandle.func()"];之前DOM的狀態[myWebview stringbyevaluatingjavascriptfromstring:@"myHandle.func()"]; 從下面。

[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(); 

2。

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);

這種方法將觀察者添加到要在kCFRunLoopAfterWaiting階段執行的Main Run循環中,如參考文獻中所述,所有UI操作都在kCFRunLoopBeforWaiting階段執行。 希望這對其他人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM