Android 正在使用$.load加载本地html

Android 正在使用$.load加载本地html,android,jquery,android-webview,Android,Jquery,Android Webview,在我的应用程序中,我加载了一个本地html,它作为 String extPath = getExternalFilesDir(null).toString(); String html = getHtml(extPath+File.separator+fileName); //it just reads html file and returns content as string webvu.loadDataWithBaseURL("file://"+extPath+File.separato

在我的应用程序中,我加载了一个本地html,它作为

String extPath = getExternalFilesDir(null).toString();
String html = getHtml(extPath+File.separator+fileName); //it just reads html file and returns content as string
webvu.loadDataWithBaseURL("file://"+extPath+File.separator,html ,
"text/html","UTF-8", null);
web视图(webvu)中加载的html文件尝试使用$.load ajax调用加载另一个html文件

$.load(“base.html”,function(){…})

ajax加载抛出以下错误。我如何解决这个问题

无法加载XMLHttpRequest file:///storage/emulated/0/Android/data/com.example.sdcardwebview/files/sec.html. 无法从null发出任何请求。空时:1


我终于想出了解决办法

空原点问题只发生在JB中,它应该有一个基于新webkit的webview,该webkit实现了更严格的同源策略

因此,所讨论的代码在JB以下的所有android版本上都能很好地工作。要在JB上运行代码,我们只需更改web视图设置。就打电话

webView.getSettings().setAllowUniversalAccessFromFileURLs(true);

SD卡已装入,因此您要寻址的路径可能是另一个位置(/mounts/SD_CARD_NAME)的别名。此外,不允许AJAX在其域之外运行。当您输入挂载路径时,即使是通过别名,它也可能不是标准“file://”协议(因此是域)的一部分。@Allendar,谢谢,而是webvu.loadDataWithBaseURL(“file://”+extPath+file.separator,html,“text/html”,“UTF-8”,null);正确地选择初始html!如果装载路径不是“file://”协议的一部分,那么即使是这样也会失败,对吗。。。是否有其他方法可以克服同源错误?是的,您可以使用“about:blank”测试第四个参数(NULL),并查看是否得到有效的回退。我认为如果函数遇到一个获取错误,它想用NULL做一些事情。因为NULL什么都不是,所以它不能处理它。您也可以在给定nu NULL的情况下尝试getExternalStorageDirectory()或getExternalFilesDir()。@Allendar使用不同的historyUrl值(第四个参数)进行了尝试,但没有多大帮助您的解决方案仅对api 16+有效可能我做错了什么,但这在我的kk设备上不起作用。