uni-app IOS使用plus.runtime.openWeb()打开链接获取不到存储的cookie导致页面无法正常访问
uni-app IOS使用plus.runtime.openWeb()打开链接获取不到存储的cookie导致页面无法正常访问
示例代码:
plus.navigator.setCookie(domain, `EIToken=${accessToken};path=/;`);
plus.runtime.openWeb(message_data.url);
操作步骤:
- 在App登录时,使用
plus.navigator.setCookie()存储API验证所需的cookie; - 在页面内使用
plus.runtime.openWeb()打开链接; - 新打开的链接因为获取不到cookie而需要重新登录;
预期结果:
可以像android一样,打开新链接可以正常获取存储的cookie,正常验证用户权限
实际结果:
IOS无法获取到cookie,而需要用户再次登录
bug描述:
提问:使用plus.navigator.setCookie()设置cookie之后,再用plus.runtime.openWeb()打开URL;在android中是可以获取到存储的cookie的,但是在ios中好像是获取不到cookie。哪位好心的大佬可以帮帮我啊
### 项目信息
| 信息 | 值 |
|--------------------|-------------------|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Mac |
| PC开发环境版本号 | 10.12.6 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.1.12 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 11.2 |
| 手机厂商 | 模拟器 |
| 手机机型 | 11 |
| 页面类型 | vue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app IOS使用plus.runtime.openWeb()打开链接获取不到存储的cookie导致页面无法正常访问的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app IOS使用plus.runtime.openWeb()打开链接获取不到存储的cookie导致页面无法正常访问的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的iOS平台兼容性问题。iOS系统对plus.runtime.openWeb()的cookie处理机制与Android不同,存在跨域限制。
解决方案:
- 使用Webview组件替代
// 创建新的webview窗口
let webview = plus.webview.create(message_data.url, 'webview', {
additionalHttpHeaders: {
'Cookie': `EIToken=${accessToken}`
}
});
webview.show();
- URL参数传递
// 将token作为参数传递
let url = `${message_data.url}${message_data.url.indexOf('?') > -1 ? '&' : '?'}token=${accessToken}`;
plus.runtime.openWeb(url);
- 使用plus.navigator.setCookie后延迟打开
plus.navigator.setCookie(domain, `EIToken=${accessToken};path=/;`);
// iOS需要等待cookie设置完成
setTimeout(() => {
plus.runtime.openWeb(message_data.url);
}, 100);

