当前位置: 首页 > 知识库问答 >
问题:

在Android Webview jQuery移动设备中允许远程ajax调用

司马祖鹤
2023-03-14

我正在用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>

共有3个答案

轩辕亮
2023-03-14

我也有同样的问题,我通过在我的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());
佟和平
2023-03-14

试试这个

WebView web=(WebView) findViewById(R.id.webView1);
web.getSettings().setJavaScriptEnabled(true);
隆兴修
2023-03-14

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

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及更高版本,请使用以下命令运行它: