Skip to content

默认浏览器 ​

本节目标:理解“默认浏览器”的核心思路,并能把它用于实际开发或面试表达。 这是因为政务微信内部浏览器和系统默认浏览器之间的会话不共享。当你在政务微信中尝试下载文件时,它会跳转到系统默认浏览器,但默认浏览器无法访问政务微信内部的登录状态,因此会触发重新登录。

在这种情况下,可以考虑以下几种方案来避免跳转到系统浏览器或者保持会话:

方案一:尝试通过政务微信内嵌浏览器直接打开文件 ​

政务微信内嵌浏览器可能会有权限限制或不支持 Blob 下载,但可以尝试让文件直接在内嵌浏览器中打开,而不是跳转到系统浏览器。可以尝试将 Blob 转换为 base64 数据 URI,以便直接在页面中显示内容,而不是通过下载链接。

例如,将文件转换为 base64 格式,并在新窗口中显示:

javascript
const exportCase = async (item) => {
uni.request({
url: urlJoin(
sxz.getConfig().api,
`/sxz/checkRecord/getRecordFiles?id=${item.id}&type=3`
),
header: {
Authorization:
uni.getStorageSync("token_type") + uni.getStorageSync("assess_token"),
},
method: "GET",
responseType: "arraybuffer",
success: (res) => {
if (res.statusCode === 200) {
const blob = new Blob([res.data], { type: "application/vnd.ms-word" });
const reader = new FileReader();   reader.onloadend = () => {
const base64data = reader.result;
const newWindow = window.open();
newWindow.document.write(
`<iframe src="${base64data}" frameborder="0" style="width:100%;height:100%;"></iframe>`
);
};   reader.readAsDataURL(blob);
} else {
uni.showToast({
title: "下载失败",
icon: "none",
});
}
},
fail: (err) => {
console.error("网络请求失败", err);
uni.showToast({
title: "网络请求失败,请检查网络连接",
icon: "none",
});
},
});
};

此方案会将文件内容直接嵌入到 iframe 中显示,但需要确保文件格式适合在 iframe 中显示(如 PDF、图片等)。对于 Word 文档,政务微信内嵌浏览器可能会有兼容性问题。

方案二:将文件上传到服务器并生成下载链接 ​

如果 Blob 数据的直接下载在政务微信内不支持,可以考虑将文件存储在服务器的临时存储空间,并生成一个带授权的下载链接,用户在政务微信内访问该链接时即可直接下载文件,而不需要再次登录。

示例步骤:

  1. 在后端创建一个接口,将 Blob 文件存储到临时位置并生成下载链接。
  2. 前端获取该链接后,直接在政务微信内使用 \<a\> 标签进行跳转,无需 Blob 下载。

方案三:使用文件预览服务 ​

对于政府或企业内部文档,可能可以使用政务微信提供的在线预览服务(如 PDF、Word 预览)。这样用户不需要下载文件,可以直接在内嵌浏览器中查看内容。

总结来看,方案二通常是最为通用的解决方式,可以保证跨平台的兼容性,同时避免了跳转到系统默认浏览器的情况。如果公司网络安全策略允许,可以考虑实现这一方案。

本站总访问 — 次