Webview lädt die Seite nicht. HILFE !!!!

  • 0 Antworten
  • Letztes Antwortdatum
Z

zblack

Gast
Halllo Android Freunde.
Ich entwickle eine App mit der Webview für Android SDK Version 16 (Android 4.1.2). und ich lasse in der Webview http://www.google.de laden. Das mache ich mit den Code:
Code:
@SuppressLint({ "NewApi", "NewApi", "NewApi" })
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlayout);
        webView = (WebView) findViewById(R.id.browserwebview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDefaultTextEncodingName("UTF-8");
        webView.getSettings().setSaveFormData(true);
        webView.getSettings().setSavePassword(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setSupportMultipleWindows(true);
        webView.getSettings().setPluginState(PluginState.ON);

        manager = CookieManager.getInstance();
        manager.setAcceptCookie(true);
        manager.acceptCookie();
        CookieSyncManager.createInstance(this);
        CookieSyncManager.getInstance().sync();
        CookieSyncManager.getInstance().startSync();
        webView.setOnTouchListener(this);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setAppCacheEnabled(true);
        webView.setVerticalScrollBarEnabled(false);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setGeolocationEnabled(true);    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.addJavascriptInterface(new JavaScriptInterface(), "MYSKRIPT");
        
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
        webView.setWebViewClient(new WebClient());
        webView.setWebChromeClient(new ChromeClient());
        webView.loadUrl("http://www.google.de");
    }
Das Problem ist: wenn ich die App ausführe und in google irgendein Text eingebe und das den Link beim Suchergebnis klicke, dann sehe ich nur eine leere weisse Seite und sonst nichts.
In der ManifestDatei habe ich:
Code:
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Der Code für WebviewClient sieht bei mir so aus:
Code:
private class WebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            loadingFinished = false;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            if (!redirect) {
                loadingFinished = true;
                linearLayout.setVisibility(View.GONE);
                view.loadUrl("javascript:(function() {" + Browser.javaskriptInjectCode + "})()");
                webView.setVisibility(View.VISIBLE);
                webView.removeAllViews();
                dialog.dismiss();
            }

            if (loadingFinished && !redirect) {
            } else {
                redirect = false;
            }
        }
        
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, final String url) {            
            if (!loadingFinished) {
                redirect = true;
            }

            if (url.startsWith("tel:")) {
                intent = new Intent(Intent.ACTION_CALL);
                intent.setData(Uri.parse(url));
                startActivity(intent);
                return true;
            }
            
            if (url.startsWith("mailto:")) {
                intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
            
            if (url.startsWith("http://maps"))
            {
                intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
            view.loadUrl(url);
            return true;
        }
        
    }
Code für ChromeClient sieht wie folgt aus:
Code:
class ChromeClient extends WebChromeClient {
        public void openFileChooser(ValueCallback<Uri> uploadMsg) {

            mUploadMessage = uploadMsg;
            intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("image/*");
            Browser.this.startActivityForResult(
                    Intent.createChooser(intent, "Image Browser"),
                    FILECHOOSER_RESULTCODE);
        }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
            Intent intent) {
        if (requestCode == FILECHOOSER_RESULTCODE) {
            if (null == mUploadMessage)
                return;
            Uri result = intent == null || resultCode != RESULT_OK ? null
                    : intent.getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;
        }
    }
Javascript interface sieht bei mir so aus:
Code:
     private final static String javaskriptInjectCode = 
                "function parseForm(event) {" +
                "    var form = this;" +
                "    if (this.tagName.toLowerCase() != 'form')" +
                "        form = this.form;" +    
                "    var data = '';" +
                "    if (!form.method)  form.method = 'get';" +     
                "    var inputs = form.getElementsByTagName('input');" +
                "    for (var i = 0; i < inputs.length; i++) {" +
                "         var field = inputs[i];" +
                "         if (field.type != 'submit' && field.type != 'reset' && field.type != 'button')" +
                "             data += field.name + '=' + field.value + '&';" +
                "    }" +
                "    MYSKRIPT.putPostData(data);" +
                "}" +
                "" +
                "for (var form_idx = 0; form_idx < document.forms.length; ++form_idx)" +
                "    document.forms[form_idx].addEventListener('submit', parseForm, false);" +    
                "var inputs = document.getElementsByTagName('input');" +
                "for (var i = 0; i < inputs.length; i++) {" +
                "    if (inputs[i].getAttribute('type') == 'button')" +
                "        inputs[i].addEventListener('click', parseForm, false);" +
                "}" +
                "";
                
    class JavaScriptInterface {
        public void putPostData(String formData) {
            postdata = formData;
        }
    }
Doch leider klappt es nicht. Es wird immer wieder leere seite angezeigt.
Wenn ich die setJavaScript methode auskommentiere, dann geht es, nur dann sieht die Webseite am Handy schlecht aus.
Bitte Hilfe
 
Zurück
Oben Unten