在 UniApp 中,Webview 组件默认不会自动传递或共享应用的 Cookie。如果需要传递 Cookie 给 Webview 加载的页面,可以通过以下方法实现:
方法一:通过 URL 参数传递
将 Cookie 值作为 URL 参数附加到 Webview 的 src 地址中,适用于简单数据传递。
// 在 UniApp 页面中
const cookieValue = encodeURIComponent('your_cookie_value');
const url = `https://example.com?token=${cookieValue}`;
// 在 Webview 组件中使用
<web-view :src="url"></web-view>
缺点:安全性较低,不适合敏感信息。
方法二:使用 uni.setStorage 和页面脚本注入
通过本地存储和注入 JavaScript 代码设置 Cookie。
- 在 UniApp 中存储数据:
uni.setStorageSync('cookieKey', 'cookieValue');
- 在 Webview 页面中通过注入脚本读取并设置 Cookie:
// 在 Webview 加载时,通过 `@onPostMessage` 接收消息并注入脚本
<web-view :src="url" [@message](/user/message)="handleMessage"></web-view>
methods: {
handleMessage(event) {
// 注入脚本设置 Cookie
const script = `
if (typeof uni !== 'undefined') {
const value = uni.getStorageSync('cookieKey');
document.cookie = 'cookieKey=' + value + '; path=/';
}
`;
// 实际需要通过 postMessage 与 Webview 内页面通信,这里仅为示例思路
}
}
注意:此方法需要 Webview 内页面支持 UniApp 的 uni API 或通过 postMessage 通信,实现较复杂。
方法三:服务端配合设置 Cookie
如果 Webview 加载的页面由自己的服务端控制,可在服务端通过响应头设置 Cookie。
- UniApp 通过接口将 Cookie 数据发送到服务端。
- 服务端在响应中设置
Set-Cookie 头,Webview 加载页面时会自动携带。
推荐方案
- 简单数据:使用 URL 参数传递。
- 敏感或复杂数据:通过服务端配合设置 Cookie,安全性更高。
- 如果 Webview 页面与 UniApp 同域,可尝试使用
localStorage 共享数据(需确保域名一致)。
根据实际需求选择合适的方法。