Open karosLi opened 4 years ago
嗯,那这样的话,就会引入 axios 库了,并要使用 axios 的请求方式了,对于纯 XMLHTTPRequest,怎么做兼容呢。 另外 network/config.js 配置的 baseURL,是固定的端口号,这样的端口可能会被端上占用,就会导致请求发不出去。
另外,既然你的这个项目是使用了 axios 作为网络库,那不用担心请求找不到的情况,但是启动一个localserver 是否还有必要?通过file协议也是可以加载本地相对路径的资源的。
你如果说的是客户端载入的前端项目,网络请求因为涉及跨域,所以要使用js-native桥接库让原生代劳网络请求,至于为什么用本地 webserver 的方式,可以看这篇文章:https://juejin.im/post/5cd4fda8f265da03a00febe1#heading-3
js-native 不是我们期望的,他有自身的限制,不能让前端共用一套代码,并且不能获取二进制数据。 跨域可以通过配置webview来允许 file 协议加载的文件去发送跨域请求。 [configuration setValue:@YES forKey:@"_allowUniversalAccessFromFileURLs"];
假定是使用了 webserver,webserver 是怎么知道 ajax 真正的 host 是什么?
解决跨域的方法是很多,但鉴于我们项目的请求报文和密码都使用了js无法提供的加密方式,通信的ssl验证也是自定义的,还有方便解决会话问题,所以是原生代劳网络请求。 但是如果你用本地webserver,还要ajax发请求,就用axios就可以,只要解决跨域问题,不过这种方式我未做验证。 你前面提到的纯 XMLHTTPRequest怎么做兼容,这个问题我没看明白。
axios 应该是可以解决 baseURL 找不到的问题的,只不过这个 baseURL 是一个 localhost,不是真正期望的请求host,只是把请求转发到本地了,但是本地又要转发给谁呢? XMLHTTPRequest 我只是提下,可能的话, 可以 hook send 方法,拼接 localhost到前面,但是也会遇到找不到真正的 host,那也许可以在 hook send 之前主动设置一个请求头,头里存一个真正的 host
baseURL 怎么会是 localhost 呢,你配置成后台服务地址就可以了,然后再解决涉及的跨域问题。
那你这边的 ajax 请求的是一个完整的路径了,就需要后台配置跨域响应头了
可以,不过我还是建议离线包下把请求交给客户端原生,改起来也很容易。
交给客户端原生,那就需要 ajax 的 url (./getInfo)使用相对路径了,才会转到 local webserver 里面去,那 local webserver 得到是一个 http://localhost:88888/appid/getInfo 的一个请求,这样请求是找不到远程服务器的,所以是需要一个真正的 host,这也是我上面问你的问题。
可以,不过我还是建议离线包下把请求交给客户端原生,改起来也很容易。
如果不会相对路径,你这边怎么把请求交给客户端去发,jsbridge 是可以发,但是不能支持二进制的场景,只能 json 数据交互,不能满足所有的场景,而且 jsbrdge 发送 api 对于 H5 是一种侵入。
可以,不过我还是建议离线包下把请求交给客户端原生,改起来也很容易。
如果不会相对路径,你这边怎么把请求交给客户端去发,jsbridge 是可以发,但是不能支持二进制的场景,只能 json 数据交互,不能满足所有的场景,而且 jsbrdge 发送 api 对于 H5 是一种侵入。
jsbridge 不能叫对h5有侵入性,本来就是混合开发,而且原生和h5就是要通过桥接的方式相互补足各自的短板。你说的二进制等等问题都能通过原生配合解决。 你不想要“侵入性”,就别考虑离线包的方式了,就用webview做个壳套个线上h5得了。
可以,不过我还是建议离线包下把请求交给客户端原生,改起来也很容易。
如果不会相对路径,你这边怎么把请求交给客户端去发,jsbridge 是可以发,但是不能支持二进制的场景,只能 json 数据交互,不能满足所有的场景,而且 jsbrdge 发送 api 对于 H5 是一种侵入。
jsbridge 不能叫对h5有侵入性,本来就是混合开发,而且原生和h5就是要通过桥接的方式相互补足各自的短板。你说的二进制等等问题都能通过原生配合解决。 你不想要“侵入性”,就别考虑离线包的方式了,就用webview做个壳套个线上h5得了。
嗯,我的意思是 jsbridge 发 api 需要前端配合的程度高,是一种成本。二进制的问题,可能你们没有遇到类似的问题,这里就不讨论了。
注释 vue.config.js 下 devServer 的配置,修改 network/config.js 下的 baseURL 地址。