Articles of webview

Android WebView setCertificate发出SSL问题

我看过很多关于SSL错误的post和信息,我自己偶然发现了一个。 我试图通过带有GlobalSign CA BE证书的Android WebView访问网页,我收到了一个不可信的错误。 对于大多数手机来说,它可以正常处理这个问题,并告诉处理程序继续。 但是,有些手机最终会在webview-client中收到onReceivedError,告诉它无法与服务器建立联系。 这是在经过onReceivedSslError并继续进行之后发生的。 我搜索了一些描述并find了很多涉及HttpClient的描述,并且安装了你自己的证书,或者只是欺骗它接受所有。 但是,由于我使用的是WebView,我以为我会使用WebView.setCertificate(SslCertificate crt)。 我搜索了这个函数的讨论,但没有find太多/任何信息。 我拿到了据说不受信任的证书,并且执行了以下代码: try{ Certificate myCert = CertificateFactory.getInstance(“X509”). generateCertificate(this.getResources(). openRawResource(R.raw.globalsign_ca_be)); X509Certificate x509 = (X509Certificate) myCert; SslCertificate sslCert = new SslCertificate(x509); webView.setCertificate(sslCert); } catch (CertificateException ex){ ex.printStackTrace(); } 使用包含以下内容的.cer文件: —– BEGIN CERTIFICATE —– MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ […]

Webview中的字符串编码问题

我收到来自下面显示的网络服务的回复 body{ color: #FFFFFF; background-color: #000000; } Ricardo Viana Vargas  09-14 Ricardo Viana Vargas é especialista em gerenciamento de projetos, portfólio e riscos. Foi, nos últimos 15 anos, responsável por mais de 80 projetos de grande porte em diversos países, nas áreas de petróleo, energia, infraestrutura, telecomunicações, informática e finanças, com um portfólio de […]

stopLoading()真正做了什么?

是的,我知道stopLoading()的文档说“ 停止当前的负载”。 但是当我尝试使用它在加载新页面之前停止加载当前正在进行的页面时,它似乎没有按照需要运行 : 07-24 12:53:30.177: V/WebView.loadUrl: http://www.google.com 07-24 12:53:30.227: V/WebViewClient.onPageStarted: http://www.google.com ===> WebView.stopLoading() called here <==== 07-24 12:53:31.917: V/WebView.loadUrl: http://www.stackoverflow.com 07-24 12:53:32.697: V/WebViewClient.onPageFinished: http://www.google.com 07-24 12:53:32.767: V/WebViewClient.onPageStarted: http://www.stackoverflow.com 07-24 12:53:33.587: V/WebViewClient.onPageFinished: http://www.stackoverflow.com 正如您在日志中看到的那样,第一个loadUrl() WebViewClient.onPageFinished()被调用,尽管之前大约1秒钟调用了WebView.stopLoading() 。 这是为什么? stopLoading()真正做了什么?

Crosswalk的XWalkView(Webview的替代品)不能与AppBarLayout + CoordinatorLayout一起使用

我正在尝试使用CoordinatorLayout和AppBarLayout实现滚动Toolbar技术(在兄弟子视图中向下滚动时隐藏Toolbar )。 我正在使用Crosswalk的XWalkView (它是一个像WebView一样的视图)。 当使用常规WebView (在NestedScrollView )时,我可以实现想要的效果: 但是,当以相同的方式使用XWalkView时,我无法让它工作。 使用以下XML布局后: 视图甚至没有出现。 删除以下行时 app:layout_behavior=”@string/appbar_scrolling_view_behavior” XWalkView至少显示在整个屏幕上和工具栏顶部。 我该怎么做才能让它发挥作用? 因为它是一个开源我应该能够使它工作…我怀疑它是子类XWalkView并实现一些接口( NestedScrollingChild ?)或通过AppBarLayout.ScrollingViewBehavior CoordinatorLayout.Behavior或AppBarLayout.ScrollingViewBehavior创建自定义行为。 有任何想法吗? BTW XWalkView在内部使用SurfaceView或TextureView来呈现Web内容。

使用一段时间后,我的应用程序在滚动WebView时冻结,说“无法锁定表面”

我的Android应用程序由几个活动组成,每个活动负责一个片段(现在)。 我的片段通常显示/附加有点像这样: mTopicFragment = (TopicFragment)getSupportFragmentManager().findFragmentByTag(“topic”); if(mTopicFragment == null) mTopicFragment = TopicFragment.newInstance(bid, page, pid); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.content, mTopicFragment, “topic”) .commit(); } TopicFragment包含一个显示一些HTML和CSS / JS内容的WebView 。 浏览应用程序一段时间后,其中一个TopicFragment WebView中的滚动变慢,最终,应用程序完全冻结。 ADB日志显示以下exception: 12-12 22:49:33.931 12582-12582/com.mde.potdroid3 W/Adreno-EGLSUB﹕ : dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0 12-12 22:49:33.941 12582-12582/com.mde.potdroid3 W/Adreno-EGLSUB﹕ : dequeue native buffer fail: Invalid […]

S9 / S9 +特定的WebView设备崩溃报告

我们一直看到谷歌播放的崩溃报告特定于三星S9(starqlesq)和S9 +(star2qlesq),两者都运行Android 8.0.0: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) backtrace: #00 pc 0000000000a51278 /vendor/lib64/libllvm-glnext.so (_ZN13ShaderObjects17loadProgramBinaryEP15CompilerContextPvmP23QGLC_LINKPROGRAM_RESULT+1396) #01 pc 000000000099b500 /vendor/lib64/libllvm-glnext.so (_ZN15CompilerContext17loadProgramBinaryEPvmP23QGLC_LINKPROGRAM_RESULT+160) #02 pc 0000000000a6e110 /vendor/lib64/libllvm-glnext.so (_Z21QGLCLoadProgramBinaryPvS_mP23QGLC_LINKPROGRAM_RESULT+88) #03 pc 00000000001a501c /vendor/lib64/egl/libGLESv2_adreno.so (_ZN17EsxShaderCompiler21LoadProgramBinaryBlobEP10EsxContextP10EsxProgramPKvmP10EsxInfoLog+256) 查看上面的堆栈跟踪,崩溃似乎是在OpenGL系统代码中。 这很奇怪,因为我们集成了崩溃报告解决方案(Microsoft App Center SDK),其他崩溃报告将转移到App Center。 我们的应用程序大量使用WebView ,我现在理解它使用Chrome,在一个单独的进程中运行。 因此,我的问题是: 这个崩溃报告是针对Google Play而不是App Center指示WebView相关崩溃的事实吗? 什么样的事情会导致像这样的崩溃? 到目前为止,它影响了3个唯一用户,因此它似乎并不特定于具有不寻常设备配置的单个用户。 在缩小和解决问题方面哪些行动最有效?

Android Webview多点触控touchstart事件无法使用2个以上的手指

请考虑以下代码: canvas.addEventListener(‘touchstart’, function(event) { console.log(‘start’); }); 当我同时用两根手指敲击时,我有以下输出(因为打印两次很酷): I/SnapScrollController(26508): setSnapScrollingMode case-default no-op I/chromium(26508): [INFO:CONSOLE(69)] “start”, source: file:///android_asset/index.html (69) I/chromium(26508): [INFO:CONSOLE(69)] “start”, source: file:///android_asset/index.html (69) 但是当我同时使用两个以上的手指时,我的结果相同,我做错了什么? 我被期望日志“开始”与我使用的手指一样多次。 另一方面, touchmove和touchend效果很好。 我在这里上传了代码

Frameloader获取额外的UA字符串 – UAProfURL

我将使用我的应用程序,将html页面加载到webview中,有时WebView似乎需要花费更长的时间来加载页面…当它这样做时,我看到垃圾邮件被发送到logcat: 09-15 11:15:56.880: D/FRAMELOADER ISSUE :(13523): Frameloader fetching extra UA String – UAProfURL 09-15 11:15:56.880: D/FRAMELOADER ISSUE :(13523): Frameloader fetching extra UA String – UAProfURL 09-15 11:15:56.880: D/FRAMELOADER ISSUE :(13523): Frameloader fetching extra UA String – UAProfURL 09-15 11:15:56.880: D/FRAMELOADER ISSUE :(13523): Frameloader fetching extra UA String – UAProfURL 09-15 11:15:56.880: D/FRAMELOADER ISSUE :(13523): Frameloader […]

从API 17开始,Android WebView中不推荐使用私有浏览。有什么替代方案?

对于允许启用私有浏览的WebView构造函数,API规范如下所示: (来自http://developer.android.com/reference/android/webkit/WebView.html ) WebView(Context context,AttributeSet attrs,int defStyle,boolean privateBrowsing) 在API级别17中不推荐使用此构造函数。不再直接通过WebView支持私有浏览,并将在以后的版本中删除。 首选使用WebSettings,WebViewDatabase,CookieManager和WebStorage对隐私数据进行细粒度控制。 从API 19(KitKat)开始,私人浏览被禁用。 尝试使用值true调用此构造函数会导致IllegalArgumentException。 建议的替代方案在复制隐私浏览行为方面甚至不会有效。 CookieManager类是一个单例,所有设置都应用于整个应用程序。 使用这种方法没有“对隐私数据的细粒度控制”。 CookieManager提供的唯一控件是能够为应用程序中存在的每个WebView完全禁用cookie。 此更改意味着第三方浏览器无法再以任何身份复制Google自己浏览器的隐私浏览function。 我非常感谢有关解决此问题的任何建议。 到目前为止,我在API中找不到任何可能使之前的私有浏览function相似的内容。

当您尝试打开URL时,阿里巴巴Android应用程序会导致崩溃

当您尝试打开链接时,来自whatsapp的示例,应用程序(在本例中为whatsapp)崩溃。 只有在您的设备中安装了阿里巴巴应用程序时才会出现这种情况。 复制路径: 安装阿里巴巴应用程序( https://play.google.com/store/apps/details?id=com.alibaba.intl.android.apps.poseidon&hl=en ) 尝试打开url 应用程序崩溃(或者它找不到任何其他活动来打开链接,甚至不是Chrome浏览器。) 我们在应用程序中看到的崩溃是: 致命exception:java.lang.SecurityException:权限拒绝:启动Intent {act = android.intent.action.VIEW dat = http://www.nu.nl cmp = com.alibaba.intl.android.apps.poseidon / com来自ProcessRecord的.alibaba.android.intl.weex.activity.WeexPageActivity VirtualScreenParam = Params {mDisplayId = -1,null,mFlags = 0x00000000)}} {7307f55 18243:… / u0a226}(pid = 18243,uid = 10226)不是从uid 10207导出的