JavaScript – Android WebView AJAX本地文件

前端之家收集整理的这篇文章主要介绍了JavaScript – Android WebView AJAX本地文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 android webview加载一个网站,我在我的资产本地.我没有自己建造,我几乎没有控制标记,js等.

问题:网站的部分使用jquery $.ajax获取HTML以显示模式,我认为我遇到了跨域问题(如果我在桌面上本地测试本站,我得到相同的来源警告,我的起源是“null”),即由于某些原因,本地js不能ajax获取资产文件夹中的其他本地文件,因为底层浏览器认为这些来自不同的起源.我已经阅读了关于这一点的任何事情,没有什么可以做出任何改变.在LogCat中没有收到任何错误或警告.

这是在Nexus 7上运行,文件位于资产文件夹(文件:/// android_asset)中.其他一切工作正常,但没有运气与ajax GETs.

从清单:

  1. <uses-sdk
  2. android:minSdkVersion="16"
  3. android:targetSdkVersion="18" />
  4. <uses-permission android:name="android.permission.INTERNET" />
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  6. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

相关网页视图代码

  1. mWebView = (WebView) findViewById(R.id.webview);
  2. mWebView.setWebChromeClient(new WebChromeClient());
  3. mWebView.getSettings().setJavaScriptEnabled(true);
  4. mWebView.getSettings().setDomStorageEnabled(true);
  5. mWebView.getSettings().setLoadWithOverviewmode(true);
  6. mWebView.getSettings().setUseWideViewPort(true);
  7. mWebView.getSettings().setSupportMultipleWindows(true);
  8. mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
  9. mWebView.setHorizontalScrollBarEnabled(false);
  10. mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
  11. mWebView.getSettings().setAllowFileAccessFromFileURLs(true);
  12. mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
  13. mWebView.addJavascriptInterface(this,"android");
  14. if (savedInstanceState != null) {
  15. mWebView.restoreState(savedInstanceState);
  16. } else {
  17. mWebView.loadUrl("file:///android_asset/site/index.html");
  18. }

这是相关的js:

  1. var load = function ( source,callback,dontShowLoader ) {
  2. if( !dontShowLoader ) {
  3. loading( 'show' );
  4. }
  5. $.ajax({
  6. url: source,type: 'GET',data: {
  7. campaign: true
  8. },success: function ( data ) {
  9. var $data = $(data);
  10. loading( 'hide' );
  11. $data.data( 'url',source );
  12. callback( $(data) );
  13. }
  14. });
  15. };

我在这里遗漏了什么吗?是否真的没有办法做ajax获取本地文件内容?请注意,我只有本地文件可以使用,正常使用情况是平板电脑在使用应用程序时未连接到互联网,因此任何外部呼叫都不会停止.

解决方法

你需要允许跨域.在这个例子中,跨域被允许用于json值和脚本.
  1. $.ajaxPrefilter( "json script",function( options ) {
  2. options.crossDomain = true;
  3. });

猜你在找的Ajax相关文章