سؤال

لدي عرض ويب في تطبيقي يعمل بشكل جيد بشكل جيد لتحميل مواقع الويب. لكن أنا لا يمكن الحصول على www.gmail.com للعمل: عندما أفتح www.gmail.com ، أرى صفحة تسجيل الدخول ، حاول تسجيل الدخول ، وبعد ذلك ، تصبح الشاشة سوداء ويتم قتل تطبيقي/عمليتي.

لا أرى الكثير في logcat الخاص بي ، فقط يتم إلقاء بعض معلومات التصحيح الغريبة على النحو التالي.

ولكن بشكل عام تعمل مواقع HTTPS بشكل جيد ، وحتى إجراءات تسجيل الدخول الأكثر تعقيدًا مثل فتح StackOverflow.com ، وتسجيل الدخول عبر OpenID من خلال HTTPs ، والعودة إلى StackOverflow ، تعمل جميعها دون مشكلة في WebView. فقط gmail.com يعطيني هذه المشاكل.

تحرير: لقد وجدت أنه إذا لم أقم بتعيين MyWebViewClient المخصص إلى WebView ، فإن التطبيق لا يعطل ولكنه يفتح موقع Gmail في متصفح النظام الافتراضي. لكني لا أريد ذلك. أريد أن يفتح في عرض الويب الخاص بي فقط.

لقد قمت بإنشاء تقرير خطأ في 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_width="fill_parent" 
        android:layout_height="fill_parent"
        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;
    }
}
هل كانت مفيدة؟

المحلول

أستنتج أن هذا خطأ. تقرير الأخطاء في http://code.google.com/p/android/issues/detail؟id=12097 وقد حصلت أيضًا على Mark Murphy المؤكد على قائمة Android Dev البريدية بأنها ربما تكون خطأً في نظام التشغيل Android منخفض المستوى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top