在 UWP 的 WebView 中停止 GIF 动画

Posted

技术标签:

【中文标题】在 UWP 的 WebView 中停止 GIF 动画【英文标题】:Stop GIF Animation in WebView of UWP 【发布时间】:2021-09-22 11:02:53 【问题描述】:

我在我的 UWP 应用程序中使用 webview,其中将提供来自外部 web 的 gif 图像。有一个要求,我需要在页面停留 5 秒后停止 GIF 动画。我怎么能做到这一点???我一直在寻找注入 Java Script,但找不到实际的方法。有人可以帮忙吗???

【问题讨论】:

【参考方案1】:

对于这种情况,一种常见的解决方法是使用带有 javascript eval 函数的 InvokeScriptAsync 来使用 html 事件处理程序

要停止 Gif,您可以使用以下 javascript 方法。

 [].slice.apply(document.images).filter(is_gif_image).map(freeze_gif);
 function is_gif_image(i) 
     return /^(?!data:).*\.gif/i.test(i.src);
 



function freeze_gif(i) 
     var c = document.createElement('canvas');
     var w = c.width = i.width;
     var h = c.height = i.height;
     c.getContext('2d').drawImage(i, 0, 0, w, h);
     try 
         i.src = c.toDataURL("image/gif"); 
      catch (e)  
         for (var j = 0, a; a = i.attributes[j]; j++)
             c.setAttribute(a.name, a.value);
         i.parentNode.replaceChild(c, i);
     
 

并在页面导航完成 5 秒后使用 eval 函数注入它。

 private async void MyWebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
 
     await Task.Delay(TimeSpan.FromSeconds(5));
     var function = @"[].slice.apply(document.images).filter(is_gif_image).map(freeze_gif);
 function is_gif_image(i) 
     return /^(?!data:).*\.gif/i.test(i.src);
 
 function freeze_gif(i) 
     var c = document.createElement('canvas');
     var w = c.width = i.width;
     var h = c.height = i.height;
     c.getContext('2d').drawImage(i, 0, 0, w, h);
     try 
         i.src = c.toDataURL('image / gif'); 
      catch (e)  // cross-domain -- mimic original with all its tag attributes
         for (var j = 0, a; a = i.attributes[j]; j++)
             c.setAttribute(a.name, a.value);
         i.parentNode.replaceChild(c, i);
     ";
    
     await MyWebView.InvokeScriptAsync("eval", new string[]  function );
 

【讨论】:

以上是关于在 UWP 的 WebView 中停止 GIF 动画的主要内容,如果未能解决你的问题,请参考以下文章

MAC的GIF动图录屏软件LICECAP

如何用 Python 制作 GIF 动图

UWP 发送文件数据到 WebView

UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv

UWP开发入门(二十三)——WebView

在 Xamarin UWP 中打印具有多个页面的 WebView