Android WebView + AJAX本地文件

我有一个android webview加载一个网站,我本地在我的资产。 我没有自己build立,而且我对标记,js等等的控制很less。

问题:部分网站使用jQuery $ .ajax-gets获取HTML以显示模式,我想我遇到了一个跨域问题(如果我在本地testing站点在我的桌面上,我得到同源 – 警告,我的起源是“空”),即出于某种原因,本地js不能ajax – 获取资产文件夹中的其他本地文件,因为底层的浏览器认为这些来自不同的来源。 我已经阅读了我所能得到的一切,似乎没有任何区别。 在LogCat中没有得到任何错误或警告。

这是在Nexus 7上运行,文件位于assets文件夹( file:///android_asset )。 一切工作正常,但没有运气的Ajax GETs。

从清单:

 <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

相关的webview代码:

 mWebView = (WebView) findViewById(R.id.webview); mWebView.setWebChromeClient(new WebChromeClient()); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setDomStorageEnabled(true); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); mWebView.getSettings().setSupportMultipleWindows(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); mWebView.setHorizontalScrollBarEnabled(false); mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWebView.getSettings().setAllowFileAccessFromFileURLs(true); mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); mWebView.addJavascriptInterface(this, "android"); if (savedInstanceState != null) { mWebView.restoreState(savedInstanceState); } else { mWebView.loadUrl("file:///android_asset/site/index.html"); } 

以下是相关的js:

 var load = function ( source, callback, dontShowLoader ) { if( !dontShowLoader ) { loading( 'show' ); } $.ajax({ url: source, type: 'GET', data: { campaign: true }, success: function ( data ) { var $data = $(data); loading( 'hide' ); $data.data( 'url', source ); callback( $(data) ); } }); }; 

我在这里错过了什么? 是否真的没有办法做Ajax GET本地文件内容? 请注意,我只有本地文件的工作,正常的使用情况是平板电脑使用应用程序时,没有连接到互联网,所以任何外部电话都是不行的。

你需要允许跨域。 在这个例子中,crossdomain被允许用于json值和脚本。

 $.ajaxPrefilter( "json script", function( options ) { options.crossDomain = true; }); 

感谢您的回答@ njzk2,我做到了:

 $.ajaxPrefilter( 'text', function( options ) { options.crossDomain = true; }); $.ajax({ url: source, type: 'GET', dataType: 'text' 

使它在Firefox,铬和IE工作加载本地文件(不通过任何服务器)

我是personnaly缺乏这个参数,至less目标api 16(想知道是否有任何其他参数可以针对任何旧的API)

 mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); 

谢谢