基本流程
小程序我是用uni-app开发的,代码如下,如果url访问需要权限的话,url中带上token。
<template>
<view>
<web-view :src="url" :webview-styles="webviewStyles" v-if="!hide"></web-view>
</view>
</template>
如上配置后,开发模式下可以正常打开嵌入页面,但是在体验版本和正式版本中无法打开,这时就需要配置业务域名,配置了业务域名后,小程序才可以调用web-view组件实现的内嵌网页。
配置路径,小程序后台(开发->开发管理->开发设置->业务域名):
如上配置之后,果然可以,体验版和正式版也都可以访问web-view了。
配置业务域名的时候,根据“具体指引”将校验文件(txt)放置在二级域名下,使得abc.cn/xxx.txt 能够访问。这样其他三级业务域名(如:www.abc.cn 、 cloud.abc.cn 等)也可打开。
注:根据我的理解,校验文件配置通过之后,不做删除更新操作的话,不会重新校验,也就是校验通过后,这个校验文件是可以删除的。
~~~~ 重点来了 ~~~~
问题
我这次遇到了一个问题,小程序中内嵌了两个web-view页面(PageA,PageB),分别打包了两个小程序,对应不同的环境。
环境A:
PageA:demo.envA.cn/for-extend/…
PageB:demo.envA.cn:8921/monitor.htm…
环境B:
PageA:www.envB.cn/for-extend/…
PageB:cloud.envB.cn/monitor.htm…
结果是,环境A的两个页面都能打开,环境B的PageB能够打开,pageA却打不开,提示:无法打开该页面 不支持打开:xxxx.xxx.xx.xx/sss..., 而且和前面业务域名没有配置不同,没有配置业务域名,体验版和正式版都打不开。现在配置了业务域名,却只是正式版本打不开,而且提示的是ip地址,不是域名,体验版和开发版都可以打开。
真的是莫名其妙啊~~~
解决:
在pageA的请求的地址最后面,加上一个"/",解决了问题。即,从demo.envA.cn/for-extend/… 变为 demo.envA.cn/for-extend/…
原因
~~~~但为什么还是没有搞明白~~~~
根据网上资料说,地址最后加"/"表示请求的是一个目录,不加"/"表示请求的是一个文件。当不加“/”时,浏览器会先将kanban当作一个资源去访问,如果没有名为kanban的资源,那么浏览器会自动在kanban后面加一个“/”,kanban是一个folder,会去尝试访问folder目录下的index.html或者default.html。但是这种调整只会在浏览器中存在,如果是手机App或者Ajax请求则不会有这种调整,没写 / 就当做具体资源来对待,如果该资源不存在,就会报 404 ,写了/ 就当目录来对待。
但问题是,我为什么环境A没有问题呢?为什么环境B的体验版没有问题呢?~~~~
请求地址最后面的 “/” 加和不加到底有什么区别?-腾讯云开发者社区-腾讯云 (tencent.com)
一个小发现
- 开发版和体验版的小程序端,都可以选择:开发调试 -〉 打开调试,这时候再打开正式版的小程序,也可以看到vConsole的按钮,可以看到一些log信息。
- 打开调试之后,访问pageB,提示的不是无法打开该页面,而是像PC浏览器访问不存在的页面一样,提示无法找到该页面:for-extend/station-app-kanban。