允许在Android网页视图+ jquery的移动远程Ajax调用(Allow remote aja

2019-07-12 11:41发布

我正在开发与jquerymobile的的JavaScript / HTML应用程序,这使得AJAX请求发送到远程服务器。 该应用程序适用于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);
}

}

<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>

Answer 1:

试试这个

WebView web=(WebView) findViewById(R.id.webView1);
web.getSettings().setJavaScriptEnabled(true);


Answer 2:

我没有足够的积分,张贴此作为一个评论,但是,请看看下面的例子:

Ajax的一些Android设备,而不是在其他

具体地,以下是必需的基于铬网页视图:

。webView.getSettings()setAllowUniversalAccessFromFileURLs(真);

编辑:对不起,我刚才看到你已经这样做了 - 我测试了我的结束,它似乎已经解决了我的问题(通过AJAX加载本地链接时,得到了一个访问控制允许来源误差)。



Answer 3:

我有同样的问题,我在我的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;
            }

        }
    }

当我inticiate我的WebView,我实例化我WebViewClient

 mWebView.setWebViewClient(new MyWebViewClient());


Answer 4:

在AndroidManifest.xml中,你有这样一行:

<uses-permission android:name="android.permission.INTERNET" />


文章来源: Allow remote ajax calls in an Android Webview + jquery mobile