我有一个android webview加载我在本地拥有资产的网站。我不是自己构建的,对标记,js等的控制很少。
问题:网站的某些部分使用jquery $ .ajax- gets获取HTML以模态显示,并且我认为我遇到了跨域问题(如果我在台式机上本地测试该网站,则会得到相同的来源-警告,我的来源是“ null”),即由于某种原因,本地js无法ajax获取Assets文件夹中的其他本地文件,因为底层浏览器认为这些来自不同的来源。我已经阅读了有关该内容的所有内容,但似乎没有任何区别。在LogCat中未收到任何错误或警告。
它在Nexus 7上运行,文件位于资产文件夹(file:///android_asset)中。其他一切都工作正常,但是使用ajax GET却没有运气。
file:///android_asset
从清单中:
<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" />
相关的网页视图代码:
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吗?请注意,我 只有 本地文件可以使用,正常使用情况是使用该应用程序时平板电脑未连接到互联网,因此任何外部呼叫都无法进行。
您需要允许跨域。在此示例中,跨域允许用于json值和脚本。
$.ajaxPrefilter( "json script", function( options ) { options.crossDomain = true; });