2012-01-21 28 views
9

Chcę załadować HTML <IFRAME> wewnątrz WebView, ale nie wiem dlaczego, nie jest w stanie tego zrobić.WebView z IFRAME android

Używam następujący kod do załadowania <IFRAME>

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

Oto co próbowałem.

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

Wspomniałem uprawnienie do internetu:

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

Próbowałem również ustawienia na WebViewClient z shouldOverrideUrlLoading zawsze wraca fałszywe.

Ale to po prostu nie działa.

Próbowałem tego z różnymi witrynami, tj. Witrynami innymi niż google.com.

Jestem testowania to na Samsung Nexus S przebiegu ICS 4.0.3

Odpowiedz

8

Jak to działało.

zauważyłem Log kot rzuca mi

WebKit wydawania zezwolenia: EventHub.removeMessages (int Co = 107) jest nieobsługiwane przed WebViewCore jest ustawiony

Aby rozwiązać ten problem, Musiałem dodać android:hardwareAccelerated="true" w tagu Manifestu <application>.

Występowałam na ICS i okazało się, że ten sam problem wystąpi po dodaniu urządzeń Honeycomb.

Mam nadzieję, że to pomoże.

+0

hi, co to android: hardwareAccelerated = "prawda" oznacza? –

+0

@Shardul: zobacz zrzut ekranu: http://i.imgur.com/OyCxlwh.png, hardwareAccelerated = true jest ustawione, ale element iframe nie może załadować strony google.com – YumYumYum

+0

cześć tej właściwości: hardwareAccelerated = "true" nie jest znajdź w tagu aplikacji – SAndroidD

6

spróbować z poniższym kodzie:

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); 
+0

Po prostu pytanie. Jeśli zrobisz 'setPluginState (WebSettings.PluginState.ON);' a także zrobisz 'setPluginState (WebSettings.PluginState.ON_DEMAND);' ten drugi zastąpi poprzednie? Lub możesz ustawić jeden lub drugi, a nie oba. –

0

następujące Hack pracował dla mnie za ładowanie iframe w webview.Hope ktoś jeszcze może się przydać

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);} 

     } 
    }