webview中用require连接本地html,涉及到JS加载数据跨域的问题,怎么解决?



  • webview中如何实现本地的html与网络数据互动,会出现下面错误提示

    XMLHttpRequest cannot load http://*.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.



  • 有人遇到我这样的情况吗?难道你们都是直接调用外部uri来实现的吗,如果要加载本地自己定义的html当中有要获取网络JSON你们是怎么实现的?我会提示跨域报错!有没有知道的!



  • 不大明白你的问题是什么?网页是本地数据,但是里面的图片链接是网络的?

    设置baseurl了?



  • @llyzq1987

    比如我在本地html里面用了Highcharts图,当中的数据是需要外网的JSON,我用ajax获取之后就会提示上面的错误了,我的source={require('./*.html')}



  • @ocman

    你看看这个
    http://stackoverflow.com/questions/30824796/reactjs-localhost-ajax-call-no-access-control-allow-origin-header

    这个就是跨域的问题,不过和react-native没啥关系吧。



  • @llyzq1987
    你知道怎么实现重启应用吗?



  • @ocman
    重启应用???
    这个需求好奇怪啊。
    自动更新之后重启?



  • @llyzq1987
    不是,我是要做一个切换用户的按钮在设置页面里面,还要做一个注销按钮,意思就是点击切换用户之后会重新进入登录页面,我用了this.props.navigator.replace。但是这样会有很多的BUG,比如底部的导航栏不会消失,用户不会注销等等。这一块我是刚刚涉及所以还没搞明白怎么做!



  • 哥们你这个问题解决了吗?有没有什么方案?



  • @Dennis-hui 没人回复我啊,暂时自己想了其他办法,一直都没有做切换用户这个功能搁置了!谁能解答这个问题麻烦帮下忙!



  • @ocman 跨域问题终端无法解决,只有服务器资源允许跨域请求,才能跨域请求,否则,只要服务器发展请求来源于非本站网页,就会处于安全原因反馈错误信息。



  • 怎么会有重启应用的功能?原生也不行吧。我猜你是想重新加载JsBundle吧,这个我照着reactnative.cn上热更新的代码修改了一份做过重新加载JsBundle。现在想想这应该是我项目中最费力的事,到最后也没有用上。

    说一下感觉你怎么弄吧:

    • 注销后清除上一个用户数据,navigator. resetTo到一个主页,然后你在这个场景里面做新用户的登陆逻辑验证就行了吧。

    说一下我怎么弄的吧:

    • 项目启动时我会去问服务器,我的用户信息,口令是我的cookie,这里涉及到cookie的保存,以及Android设备启动后30秒直接退出不保存cookie的坑。
    • 我在项目里做了请求过滤器,发现服务端告诉我需要登陆,我就清当前用户数据,自动跳到登陆页面。
    • 结果大概是:启动->请求我的用户数据--(需要登录)-->跳登陆。注销->清当前用户数据->跳登陆。服务器告诉我需要登陆->跳登陆。

登录后回复