当前位置: 首页 > 面试题库 >

Android WebView + AJAX本地文件

利永年
2023-03-14
问题内容

我有一个android webview加载我在本地拥有资产的网站。我不是自己构建的,对标记,js等的控制很少。

问题:网站的某些部分使用jquery $ .ajax-
gets获取HTML以模态显示,并且我认为我遇到了跨域问题(如果我在台式机上本地测试该网站,则会得到相同的来源-警告,我的来源是“
null”),即由于某种原因,本地js无法ajax获取Assets文件夹中的其他本地文件,因为底层浏览器认为这些来自不同的来源。我已经阅读了有关该内容的所有内容,但似乎没有任何区别。在LogCat中未收到任何错误或警告。

它在Nexus 7上运行,文件位于资产文件夹(file:///android_asset)中。其他一切都工作正常,但是使用ajax GET却没有运气。

从清单中:

<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;
});


 类似资料:
  • java版本“1.8.0_25”java(TM)SE运行时环境(版本1.8-0_2-b18)java热点(TM)64位服务器虚拟机(版本25.25-b02,混合模式) Appia1.3.4.1 Android SDK ro . build . version . SDK = 21.. 使用的设备:-Nexus 7,5.0.2 你好 我使用下面的代码从android.webkit.webview获取

  • 问题内容: 根据Same OriginPolicy,SOP不应应用于file://协议,但是为什么我的代码不起作用?我正在从本地系统运行此测试页面,并且与html页面位于同一目录中。如果我将URL更改为http://www.google.com/,它也无法正常工作。我不明白为什么,有人可以解释吗? 编辑: 控制台打印如下: XMLHttpRequest无法加载文件:/// C:/Users/yc/

  • 移动应用程序新手。我正在尝试在我的android应用程序上使用webview。但我的代码中有一个问题。我使用了https://developer.android.com/但它现在不知怎么起作用了。你能查一下我的密码吗。。。。 Android说“无法解决符号webview”... 整个代码都在这里-

  • 问题内容: 我对JQuery和Ajax有点陌生,所以如果这是新手的问题,我深表歉意。 我正在尝试使用本地文件中的ajax来访问Web(例如,获取文本文件)。 我没有使用IIS或任何其他来自硬盘驱动器的简单文件(我需要它保持这种状态)。 在IE8和Chrome(版本11.0.696.60)上都进行了检查。 这是一些JavaScript来说明: 此代码试图从Web加载文本文件-IE和chrome上的操

  • 问题内容: 我正在使用jQuery和一些xml文件开发网站的脱机版本。我在xml文件上执行$ .ajax调用时遇到jQuery中的问题jQuery引发错误。 当我查看错误时,我可以告诉它正在加载XML文件,因为它位于错误的responceText属性中。它似乎可以在Firefox中正常工作。 这是我的电话的样子 当我在Web服务器上运行它时,它就可以正常工作。只有在我从文件中运行它时,才会出现此问

  • 我想通过AJAX请求检索我的本地JSON文件数据。当我在Chrome中启动html时,它产生了错误: XMLHttpRequest无法加载。跨源请求仅支持以下协议方案:超文本传输协议、数据、chrome、chrome-扩展、https、chrome-扩展-资源。 以下是我的代码: 如果我添加<code>数据类型:“jsonp”,则 它返回我错误函数。