2012-01-21 85 views
9

我想在WebView中加載HTML <IFRAME>,但我不知道爲什麼,它不能這樣做。帶有IFRAME的WebView android

我使用下面的代碼加載<IFRAME>

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

這是我都試過了。

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

我已經提到上網權限:

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

我也曾嘗試設置與WebViewClient總是shouldOverrideUrlLoading返回false。

但它只是不工作。

我試過這個不同的網站,即google.com以外的網站。

我測試此上,三星Nexus S運行ICS 4.0.3

回答

8

這是怎麼制定。

我注意到登錄貓被扔我

WebKit的權限問題:EventHub.removeMessages(INT什麼= 107)爲前WebViewCore了

爲了解決這個問題,不支持 ,我必須在<application> Manifest的標記中添加android:hardwareAccelerated="true"

我在ICS上遇到過這種情況,發現在蜂窩設備發佈後會出現同樣的問題。

希望這會幫助一些人。

+0

嗨,什麼這個機器人:硬件加速= 「真」意味着什麼? –

+0

@Shardul:看到截圖:http://i.imgur.com/OyCxlwh.png,hardwareAccelerated = true已設置,但iframe無法加載google.com頁面 – YumYumYum

+0

在此android:hardwareAccelerated =「true」屬性不是在應用程序標籤中找到 – SAndroidD

6

嘗試用下面的代碼:

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

只是一個問題。如果你做'setPluginState(WebSettings.PluginState.ON);'並且你也做了'setPluginState(WebSettings.PluginState.ON_DEMAND);'後者會覆蓋前者的權利?或者你設置一個或另一個,而不是兩個。 –

0

下面的技巧在webview.Hope爲我工作負載的I幀有人還可能會發現它有用

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

     } 
    }