web-dev-qa-db-fra.com

WebView avec un IFRAME android

Je veux charger un <IFRAME> HTML à l'intérieur d'une WebView, mais je ne sais pas pourquoi, il ne peut pas le faire.

J'utilise le code suivant pour charger <IFRAME>

webView.loadData("<iframe src=\"http://www.google.com\"></iframe>", "text/html",
                "utf-8");

Voici ce que j'ai essayé.

WebSettings webViewSettings = webView.getSettings();
webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webViewSettings.setJavaScriptEnabled(true);
webViewSettings.setPluginsEnabled(true);
webViewSettings.setBuiltInZoomControls(true);
webViewSettings.setPluginState(PluginState.ON);

J'ai mentionné la permission Internet:

<uses-permission Android:name="Android.permission.INTERNET" />

J'ai également essayé de régler la WebViewClient avec shouldOverrideUrlLoading renvoyant toujours la valeur false.

Mais ça ne marche pas.

J'ai essayé cela avec différents sites, c'est-à-dire des sites autres que google.com.

Je teste cela sur, Samsung Nexus S en cours d'exécution ICS 4.0.3

10
Shardul

Voici comment cela a fonctionné.

J'ai remarqué que le chat de journal me jetait 

Problème d'autorisation de WebKit: EventHub.removeMessages (int what = 107) est Non pris en charge avant la configuration de WebViewCore.

Pour résoudre ce problème, j'ai dû ajouter Android:hardwareAccelerated="true" dans la balise <application> de Manifest. 

Je faisais l'expérience de ceci sur ICS et j'ai constaté que le même problème se produirait après les périphériques Honeycomb.

J'espère que cela aidera quelqu'un.

8
Shardul

Essayez avec le code ci-dessous:

webView.setInitialScale(1);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;

Log.e(SimpleBillsConstants.SIMPLE_BILLS, width + "-" + height);

String data_html = "<!DOCTYPE html><html> <head> <meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"target-densitydpi=high-dpi\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"stylesheet\" media=\"screen and (-webkit-device-pixel-ratio:1.5)\" href=\"hdpi.css\" /></head> <body style=\"background:black;margin:0 0 0 0; padding:0 0 0 0;\"> <iframe style=\"background:black;\" width=' "+width+"' height='"+height+"' src=\""+VIDEO_URL+"\" frameborder=\"0\"></iframe> </body> </html> ";

webView.loadDataWithBaseURL("http://vimeo.com", data_html, "text/html", "UTF-8", null);
7
Vinayagam.D

le hack suivant a fonctionné pour moi pour le chargement des iframes dans webview. J'espère que quelqu'un trouvera cela utile

    String webContent="your data to be loaded in webview"
if(webContent.contains("iframe")){
                Matcher matcher = Pattern.compile("src=\"([^\"]+)\"").matcher(webContent);
                matcher.find();
                String src = matcher.group(1);
                webContent=src;

                try {
                    URL myURL = new URL(src);
                    webView.loadUrl(src);

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }else {

                webView.loadDataWithBaseURL(null, "<style>img{display: inline;height: auto;max-width: 100%;}</style>" + webContent, "text/html", "UTF-8", null);}

        }
    }
1
Muahmmad Tayyib