- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在开发一款名为 Lightning Browser 的开源浏览器,但在最近更新到 Android (4.2.2) 时遇到了一些问题。
在触摸 View 之前,WebViews 将无法完全呈现。它仅发生在最新的 Android 版本上。在 4.2.1 上,WebView 渲染得非常好。我使用 Nexus 7 进行开发,在收到 4.2.2 更新后,浏览器立即停止渲染。其他用户也遇到过这种情况,并且多次确认仅在 4.2.2 上发生。它正在针对 API 级别 16 和 17 发生,但我已经看到针对 API 级别 9 的 WebKit 浏览器没有这个问题。
我已尝试使用我在 Stack Overflow (Android WebView renders blank/white, view doesn't update on css changes or HTML changes, animations are choppy) 上找到的问题的解决方案来解决此问题。但是,仅将 WebView 的 RenderPriority 设置为高并不能解决它......让它在不被触摸的情况下呈现的唯一方法是将 invalidate() 命令放在 WebView 的 OnDraw() 方法中。这会导致 WebView 不断地重新绘制。这可行(有点),动画很流畅,页面加载非常快,但否则会导致 WebView 的性能下降。
我也看过这个问题(与我的非常相似),但没有很好的答案。 Android WebView Fails to Completely Render Content Until User Interaction
我所说的性能下降是指输入。文本输入滞后,WebView 本身无法像以前那样处理正在发生的事情。使用 invalidate() 方法调用对浏览器进行基准测试会使基准测试性能下降约 8%。我知道基准测试并不是万能的,但它告诉我,连续绘图正在使系统紧张并导致系统忽略其他任务。
结论...Android 4.2.2 中的 WebView 在触摸之前不会呈现。我知道解决此问题的唯一方法是在 WebView 的 onDraw() 方法中调用 invalidate()。这对性能不利,我正在寻找一种不同的方法来解决这个问题。
魔法密码(我正在使用)...
class MyWebView extends WebView
{
@Override
onDraw(Canvas canvas)
{
invalidate();
super.OnDraw(canvas);
}
}
删除
invalidate();
在被触摸之前它不会渲染。
有没有人对如何使 WebView 呈现(除了我所做的)有任何建议?顺便说一句,这是我在 Stack 上提出的第一个问题,如果我不清楚或者我做错了什么,请原谅我。
编辑:我发现了这个问题 here关于类似的问题并已解决,问题是,我什至不明白答案的含义。如果有人能启发我,它可能会有所帮助。
我在 logcat 中收到此错误
E/chromium(1243): external/chromium/net/disk_cache/backend_impl.cc:2022: [0705/172030:ERROR:backend_impl.cc(2022)] Corrupt Index file
最佳答案
所以我终于找到了导致 WebView 不呈现的问题。我正在我的 WebView 的 WebViewClient 内启动和停止可绘制的动画。这个drawable只是一个在页面加载时旋转的刷新按钮......简单吧?
在浏览器的非全屏模式下,旋转的drawable和WebView都是同一个父级的子级,而在全屏模式下,drawable成为WebView的子级。不知何故,通过在页面加载时启动动画并在完成时(全屏)停止动画,应用程序决定旋转可绘制对象需要所有绘图能力,而 WebView 从不绘制。当处于全屏模式并且drawable成为WebView的子级时,WebView的渲染优先级高于drawable并且可以正常绘制。
这个故事的寓意是...... WebViews 喜欢成为要绘制的最高优先级的 View 。如果有其他 View 获得更高的优先级,它们将无法正确绘制。
我不是动画方面的专家,所以我现在需要重新考虑如何为可绘制对象设置动画,以免中断 WebView。
希望这是有道理的。感谢阅读。
关于android - WebView 在触摸 Android 4.2.2 之前无法呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127762/
Webview shouldInterceptRequest方法总是返回null。我去了adblocking的use方法。我尝试了很多adblock方法,但是总是需要这个shouldIntercept
在我的 Native React 项目中,我想使用 WebView。 HTML是指外部的css文件,css文件是指一些自定义字体。 鉴于此层次结构: app/ app/index.ios.js app
我在一个页面上有多个 webview,当应用程序加载时,主页面卡住了将近 8-10 秒,我猜测这是所有 webview 加载各自网站所花费的时间,为什么 Ui 卡住了,我怎么能使 webview 加载
nativescript 中的 webview 是否有“导航”事件? 我已经在 Xamarin (c#) 中用 完成了 Browser.Navigating += Myfunction natives
我的浏览器 (webview) 以 HTML 页面开头 FILEJAVA.class.getResource ("FILEHTML.html")。 ToExternalForm () 每当我访问谷歌时
我们正在开发一个 JavaFX 2.x 应用程序,它需要提供一些 GIS 支持。我们得出的结论是,通过嵌入式 WebView 使用 GoogleMaps 是最快的选择。它的问题在于每次我们的应用程序启
有没有办法销毁 WebView 实例?如果页面加载,并说视频开始播放,我希望能够,当我隐藏 WebView 时,基本上可以销毁它,或者至少重置它。 我知道我可以听 visibleProperty 并执
有没有办法在不启用远程模块的情况下在 webview 和主窗口之间进行通信? When this attribute is false the guest page in webview will
我使用以下代码来拦截Web View 中的对话框,但看不到内容或无法与之交互: Element webview= querySelector("#webview"); Map map=new
我正在创建一个页面,该页面将在 Java 的 WebView 中打开,或在外部浏览器中手动打开。如果页面是从 Java 加载的——我需要它来执行特定的回调,因为 Java 被用作一种后端,但如果页面是
我有一个 React Native WebView ,它运行一个小的 HTML 文档。该文档显示了一些图像。 我希望显示位于应用程序的 Documents 文件夹中的图像,即图像不是静态 Assets
我正在使用 JavaFX webview 开发一个网络爬虫。出于抓取目的,我不需要加载图像。当页面被加载时,Webkit 会产生很多 UrlLoader 线程。所以我认为最好禁用图像,这样我会节省很多
这个问题在这里已经有了答案: Android webview launches browser when calling loadurl (11 个答案) 关闭 7 年前。 我花了两天的时间来寻找一
我正在加载一个网页,我想使用基本身份验证登录,我有使用 Swift 的经验并且能够像下面那样执行基本身份验证,但我无法为我的应用程序的 Flutter 版本实现基本身份验证。 ---- swift 代
我用 webview 创建了应用程序,我想在 webview 中加载所有内部链接并在 android 浏览器中加载外部链接。现在的问题是我正在使用 html 广告,当我点击广告时我想打开外部浏览器,但
我需要在父背景图案上显示我的 webview 内容。有没有直接的方法来做到这一点? 最佳答案 这可能有用 final com.sun.webkit.WebPage webPage = com.sun.
是否可以从 webview 中加载的页面读取 http 请求和响应数据。我想要做的是在用户单击 webview 中页面内的链接后从响应中获取二进制数据。任何帮助或线索将不胜感激 最佳答案 创建您自己的
我有一个简单的WebView在 Android 上运行 Web 应用程序。问题是当我旋转手机以将其更改为横向 webview重新加载并回到开头。 我怎样才能防止这种行为? 罗恩 最佳答案 从 Andr
我创建了一个带有 webview 标签的自定义浏览器。当我在 google.it(或 google.com)中导航时,有时会出现一条消息说 chrome 已过时。我的应用版本是: Node.js 8.
我正在使用 Electron 创建简单的网络浏览器。我的用例是我需要通过不同/各自的代理 IP 路由每个 URL。如果用户输入 google.com,则必须通过 123.123.122.1:8081
我是一名优秀的程序员,十分优秀!