返回

Flutter 分享动态地址尾巴

前端

概览

Flutter是一个流行的跨平台移动应用程序框架。它允许开发者使用单个代码库为iOS、Android和Web开发应用程序。然而,Flutter在处理浏览器端的一些特性时存在一些陷阱,例如,Flutter会将“#”添加到URL结尾,这可能会导致用户在浏览和共享网页时遇到问题。

问题

当Flutter应用程序加载时,它会在当前网页地址的后面加上“#”。例如,如果应用程序的URL是“example.com”,那么在应用程序加载后,URL将变为“example.com/#”。这个“#”被称为“散列标记”,它通常用于指示网页中的特定部分。然而,在Flutter应用程序中,散列标记没有任何用处。相反,它只会让URL看起来杂乱无章,并且可能会导致用户在浏览和共享网页时遇到问题。

解决方案

防止Flutter将“#”添加到URL结尾的最佳方法是使用window.history.pushState()方法。这个方法允许你在不重新加载页面的情况下更改URL。要使用window.history.pushState()方法,你需要执行以下步骤:

  1. 创建一个新的历史状态对象。你可以使用以下代码来创建历史状态对象:
const stateObj = { foo: "bar" };
  1. 将新的历史状态对象推入历史记录堆栈。你可以使用以下代码来将新的历史状态对象推入历史记录堆栈:
window.history.pushState(stateObj, "page 2", "page2.html");
  1. 监听popstate事件。当用户点击浏览器的前进或后退按钮时,就会触发popstate事件。你可以在popstate事件中执行以下代码来防止Flutter将“#”添加到URL结尾:
window.addEventListener("popstate", function(event) {
  if (window.location.hash === "#") {
    window.location.hash = "";
  }
});

结论

通过使用window.history.pushState()方法,你可以防止Flutter将“#”添加到URL结尾。这将使你的Flutter应用程序看起来更加专业,并且可以防止用户在浏览和共享网页时遇到问题。