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);

操作步骤:

  1. 在App登录时,使用plus.navigator.setCookie()存储API验证所需的cookie;
  2. 在页面内使用plus.runtime.openWeb()打开链接;
  3. 新打开的链接因为获取不到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不同,存在跨域限制。

解决方案:

  1. 使用Webview组件替代
// 创建新的webview窗口
let webview = plus.webview.create(message_data.url, 'webview', {
  additionalHttpHeaders: {
    'Cookie': `EIToken=${accessToken}`
  }
});
webview.show();
  1. URL参数传递
// 将token作为参数传递
let url = `${message_data.url}${message_data.url.indexOf('?') > -1 ? '&' : '?'}token=${accessToken}`;
plus.runtime.openWeb(url);
  1. 使用plus.navigator.setCookie后延迟打开
plus.navigator.setCookie(domain, `EIToken=${accessToken};path=/;`);
// iOS需要等待cookie设置完成
setTimeout(() => {
  plus.runtime.openWeb(message_data.url);
}, 100);
回到顶部