uni-app 打包运行在微信H5网页中,使用location.href跳转公众号文章时安卓端无法正常返回上一页

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app 打包运行在微信H5网页中,使用location.href跳转公众号文章时安卓端无法正常返回上一页

我的h5项目在安卓端出现了这个问题,ios可以正常返回,安卓第一次返回正常,第二次返回直接返回首页了,请问各位有遇到过吗?

// 向 iframe 发送请求  
window.frames[0].postMessage(JSON.stringify({ type: "GET", key: "userReads" }), "*");  
console.log("iframe发送请求");  
// 等待 iframe 响应  
await waitForIframeResponse;  
let url = "https://xxxxxxxxxxxxxxxxxxx";  
let { data } = await uni.request({  
  url: `${url}/xxxxxxxxxx?key=a8a6900b6fa44366969c66efa069c246&backNumber=0`,  
  method: "POST",  
  data: userReads,  
});  
console.log("data", data);  
if (data.link) {  
  // iframe设置key  
  window.frames[0].postMessage(  
    JSON.stringify({  
      type: "SET",  
      key: "userReads",  
      value: JSON.stringify(data.userReads),  
    }),  
    "*"  
  );  
  // 存储当前时间戳 用于文章阅读完成  
  uni.setStorageSync("hide_times", Math.floor(Date.now() / 1000));  
  //跳转指定链接  
  location.href = data.link;  
} else {  
  // 链接为空,即没有文章可阅读  
  isRead.value = false;  
}
信息类型 信息
开发环境 未提及
版本号 未提及
项目创建方式 未提及

6 回复

安卓端用window.open(url)打开网页试试


好的 我尝试一下

还是无法解决这个问题

回复 4***@qq.com: window.frames[0].location.href=url 这样试试

回复 uniapp程序开发: 链接加上时间戳解决了,感谢回复

在 uni-app 中,使用 location.href 跳转到微信公众号文章时,安卓端无法正常返回上一页的问题,通常是因为微信浏览器对页面跳转的处理机制导致的。以下是一些可能的解决方案:

1. 使用 window.history.back()

在跳转到公众号文章后,尝试使用 window.history.back() 返回到上一页。你可以在页面加载时监听返回事件,并手动调用 window.history.back()

// 在跳转前记录当前页面的URL
const currentUrl = window.location.href;

// 跳转到公众号文章
window.location.href = 'https://mp.weixin.qq.com/s/xxxxxx';

// 在公众号文章页面中监听返回事件
window.addEventListener('popstate', function() {
    window.location.href = currentUrl;
});

2. 使用 iframe 嵌入公众号文章

你可以尝试使用 iframe 嵌入公众号文章,而不是直接跳转。这样用户可以在当前页面内查看文章内容,而不需要离开当前页面。

<iframe src="https://mp.weixin.qq.com/s/xxxxxx" width="100%" height="100%"></iframe>

3. 使用 uni.navigateBack

如果你在 uni-app 中使用 uni.navigateTouni.redirectTo 进行页面跳转,可以使用 uni.navigateBack 返回到上一页。

uni.navigateBack({
    delta: 1
});

4. 使用 uni-appweb-view 组件

uni-app 提供了 web-view 组件,可以在页面中嵌入网页内容。你可以使用 web-view 组件来加载公众号文章,这样用户可以在当前页面内查看文章内容。

<web-view src="https://mp.weixin.qq.com/s/xxxxxx"></web-view>

5. 使用 window.open 打开新窗口

你可以使用 window.open 打开一个新窗口来加载公众号文章,这样用户可以在新窗口中查看文章内容,而不会影响当前页面的浏览体验。

window.open('https://mp.weixin.qq.com/s/xxxxxx', '_blank');

6. 使用 uni-appnavigateToMiniProgram 跳转到小程序

如果你有对应的小程序,可以使用 uni.navigateToMiniProgram 跳转到小程序,而不是直接跳转到公众号文章。

uni.navigateToMiniProgram({
    appId: 'xxxxxx',
    path: 'pages/article/article?id=xxxxxx',
    success(res) {
        // 打开成功
    }
});

7. 使用 uni-appredirectToreLaunch

如果你需要跳转到其他页面,可以使用 uni.redirectTouni.reLaunch 进行页面跳转,而不是使用 location.href

uni.redirectTo({
    url: '/pages/article/article?id=xxxxxx'
});

8. 使用 uni-appnavigateBack 返回上一页

如果你需要返回到上一页,可以使用 uni.navigateBack 进行返回。

uni.navigateBack({
    delta: 1
});

9. 使用 uni-appgetCurrentPages 获取页面栈

你可以使用 uni.getCurrentPages 获取当前页面栈,然后根据页面栈进行页面跳转或返回。

const pages = uni.getCurrentPages();
const currentPage = pages[pages.length - 1];
// 根据 currentPage 进行页面跳转或返回

10. 使用 uni-apponUnload 生命周期

你可以在页面的 onUnload 生命周期中处理页面卸载时的逻辑,例如记录当前页面的状态或进行页面跳转。

onUnload() {
    // 处理页面卸载时的逻辑
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!