我正在用jquerymobile开发一个javascript/HTML应用程序,它向远程服务器发出ajax请求。该应用程序在Chrome上运行良好(仅在禁用web安全的情况下启动Chrome),但当我将其嵌入Android应用程序(一个简单的web视图)的资产/目录中时,远程ajax调用失败。因此,我想这可能是一个跨领域的问题。我知道phonegap没有这个问题,但如果可能的话,我不想使用phonegap。所以问题是:如何在Android webview应用程序中禁用跨域保护?
这是活动代码:
public class Moby extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_moby);
WebView mbrowser = (WebView) findViewById(R.id.webView1); //get the WebView from the layout XML
if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN)
mbrowser.getSettings().setAllowUniversalAccessFromFileURLs(true);
//mbrowser.setWebChromeClient(new WebChromeClient());
mbrowser.setWebViewClient(new WebViewClient());
mbrowser.loadUrl("file:///android_asset/index.html"); //set the HTML
WebSettings settings = mbrowser.getSettings();
settings.setJavaScriptEnabled(true);
}
}
<uses-permission android:name="android.permission.INTERNET" />
我已经在html页面中设置了jquerymobile跨域参数:
<script src="script/jquery-1.8.2.js"></script>
<script>
$(document).bind("mobileinit", function(){
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
});
</script>
<script src="script/jquery.mobile-1.2.0.js"></script>
我也有同样的问题,我通过在我的WebViewClient中重写shouldInterceptRequest来修复它。我拦截ajax调用并用java实现。对于POST方法,您也必须这样做
private class MyWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView webView, String url) {
Log.d("test", "onPageFinished");
loadWebViewJavascriptBridgeJs(webView);
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView webview, WebResourceRequest webrequest)
{
Log.d("test", "shouldInterceptRequest");
return this.handleRequest(webrequest.getUrl().toString());
}
@NonNull
private WebResourceResponse handleRequest(@NonNull String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-Agent", "");
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
return new WebResourceResponse("text/json", "utf-8", inputStream);
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
}
catch (ProtocolException e) {
e.printStackTrace();
return null;
}catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
当我实例化我的webview时,我实例化我的WebViewClient
mWebView.setWebViewClient(new MyWebViewClient());
试试这个
WebView web=(WebView) findViewById(R.id.webView1);
web.getSettings().setJavaScriptEnabled(true);
我没有足够的观点来发表评论,但是,请看看以下内容:
ajax在一些Android设备上工作,而不是在其他设备上
具体来说,基于Chrome的网络视图需要以下内容:
WebView.get设置(). setAllowUniversalAccessFromFileURL(true);
编辑:对不起,我刚刚看到你已经在这样做了——我在我的终端上测试了这个,它似乎已经解决了我的问题(通过ajax加载本地链接时收到一个访问控制允许源错误)。
在Windows,Mac 或 Linux 上远程调试 Android 设备上的实时内容。 TL;DR 设置你的Android设备进行远程调试,并从开发机中发现它。 从您的开发机器检查和调试Android设备上的实时内容。 将来自Android设备的内容屏播到DevTools。 要求 在开始远程调试之前,您需要︰ 在开发机上安装 chrome 32 或更高版本。 如果你使用的 Windows,请安装
为了更好地为移动设备服务,HTML 5推出了一系列针对移动设备的API。 Viewport Geolocation API getCurrentPosition方法 watchPosition方法和clearWatch方法 Vibration API Luminosity API Orientation API 参考链接 Viewport Viewport指的是网页的显示区域,也就是不借助滚动条的
问题内容: 我一直在使用SQL Server,现在正在将MySQL用于一个项目。使用SQL Server,我们的开发人员可以在知道主机,用户名和密码的情况下连接到本地计算机上的远程数据库。但是,使用MySQL,要使开发人员能够从其本地计算机访问,我一直必须登录MySQL并执行: 开发人员机器的IP地址在哪里。当然,如果他们更改网络,则必须再次执行。有没有一种方法可以允许所有远程连接(如我在SQL
问题内容: 除了JSONP,为什么要遵循相同的域策略? 问题答案: 出于安全原因,已实施“同源起源策略”;引用维基百科的相关句子: 这种机制对现代Web应用程序具有特殊的意义,因为Web服务器广泛依赖于HTTP cookie来维护经过身份验证的用户会话,因为服务器基于HTTP cookie信息进行操作以揭示敏感信息或执行状态更改操作。 必须在客户端维护不相关站点提供的内容之间的严格分隔,以防止丢失
本文向大家介绍mysql 修改密码和设置允许远程登录,包括了mysql 修改密码和设置允许远程登录的使用技巧和注意事项,需要的朋友参考一下 修改的用户都以root为列。 一、拥有原来的myql的root的密码; 方法一: 在mysql系统外,使用mysqladmin 方法二: 通过登录mysql系统, 二、忘记原来的myql的root的密码; 首先,你必须要有操作系统的root权限了。要是
问题内容: 我知道有一些设置可以远程调试Java程序。 它们是什么,它们是什么意思? 问题答案: 我将本文标记为针对Java 5及更低版本进行设置。 基本上使用以下命令运行它: 对于Java 5及更高版本,请使用以下命令运行它: