允许在Android Webview + jquery mobile中进行远程ajax调用

spr*_*ing 5 ajax android cross-domain android-webview jquery-mobile

我正在使用jquerymobile开发一个javascript/HTML应用程序,它向远程服务器发出ajax请求.该应用程序在Chrome上运行正常(仅在启用了禁用Web安全性的Chrome时启动)但是当我将其嵌入到Android应用程序的资产/目录(简单的webview)中时,远程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);
}
Run Code Online (Sandbox Code Playgroud)

}

<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

我已经在我的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>
Run Code Online (Sandbox Code Playgroud)

aha*_*ash 5

我没有足够的积分来发表评论,但是,请查看以下内容:

ajax在某些Android设备上运行,而在其他Android设备上不运行

具体来说,基于Chrome的webView需要以下内容:

webView.getSettings()。setAllowUniversalAccessFromFileURLs(true);

编辑:对不起,我刚刚看到您已经在执行此操作-我在终端上对此进行了测试,它似乎已经解决了我的问题(通过ajax加载本地链接时出现access-control-allow-origin错误)。


小智 5

试试这个

WebView web=(WebView) findViewById(R.id.webView1);
web.getSettings().setJavaScriptEnabled(true);
Run Code Online (Sandbox Code Playgroud)


Kén*_*ium -1

在您的 AndroidManifest.xml 中,是否有以下行:

<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回复,我给了这个使用权限的应用程序,但问题仍然存在 (2认同)