本地webapp是怎么解决跨域问题的?

像ionic的cli,都可以把一个ionic的webapp打包成本地的,那这样的话是如何解决跨域问题的?

在PC上,我直接访问连接获取数据,代码如下。(抄自W3School)

<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","http://www.w3school.com.cn/ajax/demo_get.asp",true);
xmlhttp.send();
}
</script>
</head>
<body>

<h2>AJAX</h2>
<button type="button" onclick="loadXMLDoc()">请求数据</button>
<div id="myDiv"></div>

</body>
</html>

在浏览器输入“file:///C:/Users/WINFIELD/Desktop/localinvoke/index.html”进行访问这个页面
在普通浏览器里点击按钮,是会发生跨域提示的,在设置了允许跨域的Chrome浏览器,数据可以正常返回,我理解的ionic打包(比如说打包成apk),肯定不会在这个apk里自带一个httpserver,那么应该也是类似于用这种文件路径的形式进行访问的,那么它如何解决跨域的问题的呢?

阅读 7.8k
3 个回答

浏览器才存在跨域问题,而且浏览器是bs中的b端,和服务器没啥关系,js打包为原生应用无非是有个浏览器运行环境,也许直接关了跨域安全设置,也许和浏览器完全一样

楼上说到了,跨域是浏览器定的规则,PC端的浏览器大多都通过了同源策略(可能某些可怕的浏览器没有设置,如果真有应该是功能缺陷吧)。
但是移动端的网页是通过webview实现的,而webview实际上是通过file://协议来加载的网页(即:请求网页——网页到本地——webview加载),这个协议一般的移动端浏览器就没有实行同源策略了。

根据我自己用appcan/apicloud的经验,这些壳会提供类似ajax的js api,但实际上并不走xhr,所以也就更谈不上什么同源策略了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题