gmail.com 无法在 webview 上工作(登录后)

Posted

技术标签:

【中文标题】gmail.com 无法在 webview 上工作(登录后)【英文标题】:gmail.com not working on webview (after login) 【发布时间】:2011-04-29 14:31:41 【问题描述】:

我的应用中有一个 webview,通常可以正常加载网站。但我无法让 www.gmail.com 工作:当我打开 www.gmail.com 时,我看到登录页面,尝试登录,然后屏幕变黑并且我的应用程序/进程被终止。

我在 logcat 中看不到太多,只是一些奇怪的调试信息被转储如下。

但通常 https 网站可以正常工作,甚至更复杂的登录过程,例如打开 ***.com,通过 https 通过 openid 登录,返回到 ***,在我的 webview 中都可以正常工作。只有 gmail.com 给我这些问题。

编辑: 我发现如果我不将我的自定义 MyWebViewClient 分配给 webview,应用程序不会崩溃,但会在默认系统浏览器中打开 gmail 站点。但我不想那样。我希望它只在我自己的 web 视图中打开。

我在http://code.google.com/p/android/issues/detail?id=12097 上创建了一个错误报告,附有一个可以重现崩溃的非常简单的示例项目。

I/DEBUG   ( 2173): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 2173): Build fingerprint: 'Samsung/GT-I9000/GT-I9000/GT-I9000:2.1-update1/ECLAIR/XWJM6:user/release-keys'
I/DEBUG   ( 2173): pid: 6753, tid: 6793  >>> com.myapplication.android <<<
I/DEBUG   ( 2173): signal 11 (SIGSEGV), fault addr 0000004c
I/DEBUG   ( 2173):  r0 00000000  r1 00000000  r2 00000000  r3 aa476ae0
I/DEBUG   ( 2173):  r4 00000000  r5 4c2f5b74  r6 aa476ae0  r7 00595dec
I/DEBUG   ( 2173):  r8 4c2f5da8  r9 444a7eb8  10 444a7ea0  fp 004be758
I/DEBUG   ( 2173):  ip aa4770fc  sp 4c2f5b50  lr aa1112bf  pc aac0a5ac  cpsr 48000030
I/DEBUG   ( 2173):          #00  pc 0000a5ac  /system/lib/libsqlite.so
I/DEBUG   ( 2173):          #01  pc 001112bc  /system/lib/libwebcore.so
I/DEBUG   ( 2173):          #02  pc 001118e2  /system/lib/libwebcore.so
I/DEBUG   ( 2173):          #03  pc 00111a80  /system/lib/libwebcore.so
I/DEBUG   ( 2173):
I/DEBUG   ( 2173): code around pc:
I/DEBUG   ( 2173): aac0a59c f7ff60e3 2000fd49 bf00bd70 4604b570
I/DEBUG   ( 2173): aac0a5ac 460d6cc0 f7ff4616 f8c4fd9d 230150e0
I/DEBUG   ( 2173): aac0a5bc 60e4f8c4 508cf8d4 f885e002 68ad30ff
I/DEBUG   ( 2173):
I/DEBUG   ( 2173): code around lr:
I/DEBUG   ( 2173): aa1112ac 68004905 e0021859 68002100 f6f9460a
I/DEBUG   ( 2173): aa1112bc bd10ec32 0036583c ffc9a849 4604b570
I/DEBUG   ( 2173): aa1112cc 46281d05 fd64f20b 46286826 60263e01
I/DEBUG   ( 2173):
I/DEBUG   ( 2173): stack:
I/DEBUG   ( 2173):     4c2f5b10  00000000
I/DEBUG   ( 2173):     4c2f5b14  aa31c6d3  /system/lib/libwebcore.so
I/DEBUG   ( 2173):     4c2f5b18  00000000
I/DEBUG   ( 2173):     4c2f5b1c  aa011171  /system/lib/libwebcore.so
I/DEBUG   ( 2173):     4c2f5b20  00000000
I/DEBUG   ( 2173):     4c2f5b24  afe3ae08  /system/lib/libc.so
I/DEBUG   ( 2173):     4c2f5b28  afe3db7c
I/DEBUG   ( 2173):     4c2f5b2c  afe0f170  /system/lib/libc.so
I/DEBUG   ( 2173):     4c2f5b30  00000000
I/DEBUG   ( 2173):     4c2f5b34  afe3ae08  /system/lib/libc.so
I/DEBUG   ( 2173):     4c2f5b38  00595dec  [heap]
I/DEBUG   ( 2173):     4c2f5b3c  afe0f170  /system/lib/libc.so
I/DEBUG   ( 2173):     4c2f5b40  00595ddc  [heap]
I/DEBUG   ( 2173):     4c2f5b44  4c2f5b74
I/DEBUG   ( 2173):     4c2f5b48  df002777
I/DEBUG   ( 2173):     4c2f5b4c  e3a070ad
I/DEBUG   ( 2173): #00 4c2f5b50  00595ddc  [heap]
I/DEBUG   ( 2173):     4c2f5b54  4c2f5b74
I/DEBUG   ( 2173):     4c2f5b58  aa476ae0  /system/lib/libwebcore.so
I/DEBUG   ( 2173):     4c2f5b5c  aa1112bf  /system/lib/libwebcore.so
I/DEBUG   ( 2173): #01 4c2f5b60  00595ddc  [heap]
I/DEBUG   ( 2173):     4c2f5b64  aa1118e7  /system/lib/libwebcore.so
D/Zygote  ( 2181): Process 6753 terminated by signal (11)
I/ActivityManager( 2237): Process com.myapplication.android (pid 6753) has died.

XML:

    <WebView
        android:layout_ 
        android:layout_
        android:theme="@style/Theme.NoBackground"
        android:id="@+id/webView"/>

代码:

    webView = (WebView)findViewById(R.id.webView);
    webView.getSettings().setjavascriptEnabled(true);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setAllowFileAccess(false);        
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setPluginsEnabled(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setAppCacheEnabled(true); 

    WebViewClient wv = new MyWebViewClient();
    webView.setWebViewClient(wv);

/**
 * Customized webview client to allow mp4 to play in mediaplayer.
 */
final class MyWebViewClient extends WebViewClient 
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) 
    if (url.endsWith(".mp4")) 
        Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(url));
        view.getContext().startActivity(intent);            
        return true;
     else             
        return super.shouldOverrideUrlLoading(view, url);
        // instead of the line above, I have also tried this before without any difference:
        // view.loadUrl(url);
        // return true;
    

【问题讨论】:

facebook.com 也有同样的问题——我猜是所有网站都强制打开新的浏览器窗口或系统的默认浏览器。 【参考方案1】:

我断定这是一个错误。错误报告位于 http://code.google.com/p/android/issues/detail?id=12097,我还让 Mark Murphy 在 Android Dev 邮件列表中确认这可能是一个低级别的 Android 操作系统错误。

【讨论】:

以上是关于gmail.com 无法在 webview 上工作(登录后)的主要内容,如果未能解决你的问题,请参考以下文章

WebView qml 在 iOS 11 上无法正常工作

TypeError:无法在 setUpControl 上的字符串“abc@gmail.com”上创建属性“验证器”

Kotlin Load WebView 每次都无法正常工作

无法在 laravel 5.6 电子邮件发送中与主机 smtp.gmail.com [连接被拒绝 #111] 建立连接

无法使用smtp.gmail.com从一个特定的Google帐户发送邮件

React Native:Webview getUserMedia无法正常工作(onPermissionRequest覆盖?)