26

我將本地html文件(從資產文件夾)加載到應用程序WebView。 在HTML中,我運行了一個jQuery.getJSON(url)。該網址是一個遠程服務器。WebView Javascript跨域從本地HTML文件

此操作失敗,我猜測是由於不同的原始問題(跨域)。我在chrome上運行相同的文件,並在那裏專門說明了這一點。

有沒有辦法允許Android中的WebView從本地加載的HTML文件中的遠程服務器加載數據?

+1

您是否嘗試添加「&jsoncallback =?」或「callback =?」到您的網址? – Zakaria 2011-12-27 19:54:37

+0

您是否嘗試使用「.ajax」方法而不是「getJSON」?與「.ajax」,如果你把選項「數據類型:jsonp」,它應該爲你工作! – Zakaria 2011-12-27 19:56:38

+0

遠程服務器是否需要專門支持JSONP才能正常工作?我對網頁瀏覽規則不是很熟悉,他們與桌面瀏覽器有什麼不同嗎? – mattacular 2011-12-27 20:02:03

回答

0

我加載(從資產文件夾)的本地HTML文件的應用程序的WebView

需要注意的是你沒有說你是如何做。我猜測這是file:///android_asset URL上的loadUrl()

有沒有辦法允許Android中的WebView從本地加載的HTML文件上的遠程服務器加載數據?

嘗試使用loadDataWithBaseURL()加載內容,在遠程服務器上提供一個URL作爲基準URL。

0

Ajax調用不會從本地文件系統工作。更多的將會成爲跨域。所以它不會工作。它在eclipse中工作,becuz你嘗試從本地服務器。

2

不要忘記添加Internet權限在manifest文件:

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

還要確保您使用JSONP請求(?不要忘了&回調=如上所述)

50

今天早上我發現了似乎正在工作的解決方案。

Java的部分

初始化您的WebView:

WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout); 

得到的WebView設置:

WebSettings settings = _webView.getSettings(); 

集以下設置:

settings.setJavaScriptEnabled(true); 
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule 
settings.setAllowUniversalAccessFromFileURLs(true); 

現在你可以通過標準的方式加載HTML文件:

_webView.loadUrl("file:///android_asset/www/index.html"); 

JavaScript部分

創建通過標準的方式

var xhr = new XMLHttpRequest(); 
xhr.open("get", "http://google.com", false); 
xhr.send(); 

XHR請求在某處打印結果

document.body.innerHTML = xhr.responseText 

注意: 此過程僅適用於API級別16或更高(至少文檔說)。

+2

根據setAllowFileAccessFromFileURLs和setAllowUniversalAccessFromFileURLs的文檔,對於ICS和更舊版本,它們過去被設置爲true。從果凍豆開始,他們將其關閉。如果您嘗試從本地HTML頁面加載本地JS文件,那麼您需要啓用這些文件。 – Steven 2013-04-03 22:34:37

+0

獲取以下內容:NETWORK_ERR:XMLHTTPRequest異常101 – Codebeat 2014-03-12 13:09:55

+1

完美,工作正常:) – 2014-05-11 05:36:34

0

我們使用的解決方案是使用Android從服務器獲取更新文件,將它們放置並覆蓋文件到Web文件夾中,然後瀏覽。