请教一下大佬们,uniapp的web-view怎么setCookie?
我们用uniapp开发的app调用三方的h5页面
需要把登录态cookie带过去
不知道如何在uniapp中实现

- 发布:2020-08-25 13:46
- 更新:2025-04-17 15:38
- 阅读:9189
最佳回复

梦里追逐 (作者)
//监听“plusready”事件
document.addEventListener("plusready", function() {
// var wvB = plus.webview.currentWebview();
var wvB = plus.webview.create('https://1x.fuyou.online', 'xiaoShop', {
top: '44px',
bottom: '44px'
})
console.log(JSON.stringify(wvB))
wvB.evalJS('document.cookie ="sid=bbcf2ee460fb405d928218ad35;path=/;domain=1x.fuyou.online"')
wvB.show()
}, false);

先加载本地的一个html,挂载【uni.webview.1.5.4.js】,本地html等待【UniAppJSBridgeReady】调用消息通知uniapp,确保插件都正常运行。uniapp在通知本地html【plus.navigator.setCookie】给我写一段 cookie,然后页面跳转到业务子系统。
参考代码如下
<html>
<body>
<script>
document.addEventListener('UniAppJSBridgeReady', () => {
uni.postMessage({ });
});
function mySetCookie(data) {
if (!data) return;
if (window.plus) {
if ("access_token" in data) {
const now = new Date();
now.setTime(now.getTime() + 10 * 24 * 60 * 60 * 1000);
const dataStr = now.toUTCString();
plus.navigator.setCookie(data.domain,
`access_toke=${data.access_token}; app_id=${data.app_id}; expires=${dataStr}; path=/; SameSite=None`
)
}
} else {
alter('系统兼容异常,请联系管理员')
}
if ("href" in data) {
location.href = data.href;
}
}
</script>
</body>
</html>
uni.webview.js 最新版地址:https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js
<template>
<web-view src="_www/static/app/app.html" :update-title="true" @message="messageHandler"></web-view>
</template>
<script>
export default {
data() {
return {
href: "",
isLoad: false
}
},
onReady() {
// #ifdef APP-PLUS
let currentWebview = this.$scope.$getAppWebview();
const wv = currentWebview.children()[0]
wv.setJsFile("_www/static/app/uni.webview.1.5.4.js");
// #endif
},
methods: {
messageHandler(obj) {
//console.log(obj)
if (!this.isLoad) {
let currentWebview = this.$scope.$getAppWebview();
const wv = currentWebview.children()[0]
const obj = {
app_id: "11111111111111111",
access_token: "11111111111111111",
domain: "http://www.baidu.com",
href: "http://192.168.1.1/demo.html"
};
wv.evalJS(`mySetCookie(${JSON.stringify(obj)})`)
}
}
}
}
</script>

5***@qq.com - 90后IT男
我来给个uniapp的写法研究了一天,web-view也试过,plus.runtime.openURL、plus.webview.open()等等恶心的写法都试过;
正文:
let temp = getApp().resetSetStorage(); //为对象数组可以换成自己的数据
let wv = plus.webview.create(url,'showUrl',{});
wv.onloaded = e=>{
temp.map(item=>{
wv.evalJS(localStorage.setItem('${item.key}','${item.value}')
);
})
}
wv.show('slide-in-bottom',20);

l***@akulaku.com - fuxk
需要自己写插件吧?
android的插件可以这么写,ios的不懂。
@UniJSMethod(uiThread = true)
public void setCookie(String host, String value) {
CookieManager it = CookieManager.getInstance();
it.setAcceptCookie(true);
it.setCookie(host, value);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
CookieSyncManager.getInstance().sync();
} else {
it.flush();
}
}

2***@qq.com - 胸口碎大石
楼主请问找到解决的办法没有?
-
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.setCookie
2021-07-02 11:16
-
回复 DCloud_Android_DQQ: 多谢,结合楼主的,在3.x版本下用如下方法也达到了效果:
const currentWebview = this.$scope.$getAppWebview();
currentWebview.evalJS('document.cookie ="session.id=a3512ad9e2c54282ad371f5b0c7731e1; Path=/fast; HttpOnly; SameSite=lax"')2021-07-02 14:45
-
回复 2***@qq.com: 大佬,能贴全一点的代码吗?
或者一个demo,我的需求是,unipp做的登录页,然后跳转webview一个h5页面,把数据存到cookit里。。2021-10-22 09:04
-
-
梦里追逐 (作者)
在uniapp中实现登录然后共享cookie给第三方h5页面
2020-08-26 14:11
梦里追逐 (作者)
在uniapp中实现登录然后共享cookie给第三方h5页面,这样的话三方h5才能读取到登录态然后自动登录
2020-08-26 14:13
1***@qq.com
回复 梦里追逐: 官方大神qq上说你的问题和我的类似,让我指点一二,其实我的业务和你的正好相反。不过我给你提供一个思路,可行不可行我也没试过。将web-view组件用plus.webview.create替代,然后用 evalJS注入设置cookie的脚本,从而达到给第三方页面设置cookie的效果,要是可行麻烦给我也说一下.
2020-08-26 14:23
梦里追逐 (作者)
回复 1***@qq.com: 大佬,可以的 我把代码贴出来了
2020-08-26 14:54
1***@qq.com
回复 梦里追逐: 可以的!
2020-08-26 14:55
梦里追逐 (作者)
回复 1***@qq.com: 大佬 不好意思哈,我后面又回归测试了一下,不知道什么原因 偶尔可以 偶尔失效
2020-09-11 17:09
1***@qq.com
回复 梦里追逐: 你这这种情况一般是js注入时机相比第三方页面渲染速度有时候快有时候慢造成的,快则正常,貌似无解!
2020-09-23 16:26
1***@163.com
大佬,我要是想从打开的webview里面拿到cookie然后传给uniapp,这种要是实现有什么思路吗,
2024-05-13 10:54