【问题标题】:Polymer app-route: intercept refresh pagePolymer app-route:拦截刷新页面
【发布时间】:2018-07-27 12:27:20
【问题描述】:

我正在努力摆脱当前的情况:我们在某个服务器上部署了一个聚合物 SPA (A) 并绑定到某个 url:http://example.com/A,我们确实需要展示旧应用程序的遗留页面暂时,为了做到这一点,已经开发了一个新应用程序(B)并绑定到不同的url(http://example.com/B)。

B 所做的是对旧版应用程序的页面进行构图并显示一个按钮,该按钮的目的是通过访问 document.referrer 值并重新加载页面来返回到先前的位置,问题是作为一个 SPA,服务器上不存在 URL。

更详细:

  1. 用户登录应用程序A (http://example.com/A/overview)
  2. 用户使用 SPA 并最终访问由路由管理的某个 url (http://example/A/stuff/we/sell/jackets)
  3. 在页面 http://example.com/A/stuff/we/sell/jackets 中有一个指向应用程序 B 的链接,框住了显示夹克的旧应用程序页面
  4. 用户点击链接进入http://example.com/B/legacy/jackets,此时document.referrer等于http://example.com/A/东西/我们/卖/夹克
  5. 用户单击按钮关闭视图,应用程序 B 将窗口的位置设置为文档。referrer 尝试将用户从他/她来自的地方登陆。
  6. 作为应用程序 A 和 SPA,URL http://example.com/A/stuff/we/sell/jackets 在服务器上不存在,并且用户(正确地)获得了 404。

那么问题来了:有没有什么办法可以拦截app路由中window.location变量的变化,避免页面全刷新,让用户进入链接所在的页面?

【问题讨论】:

    标签: polymer-2.x app-route


    【解决方案1】:

    我同意@daKmoR 实际上,您永远不应该从服务器接收 404 - 您可以从聚合物应用程序中获得它。

    获取一个文件,如果它不存在则尝试 index. 每个服务器看起来都不一样。您使用的是什么服务器?我可以帮助 IIS 和 nginx。

    【讨论】:

      【解决方案2】:

      如果我理解正确,那么这似乎是您的服务器配置有问题。

      如果您确实有 SPA,您希望所有 URL 都转到您的 app-shell(通常是您的 index.html)。

      例子:

      http-root
      ├─ some-folder
      │  └─ index.html
      └─ index.html
      

      如果你有一个 apache 运行,你可以去:

      • http://example.com/index.html
      • http://example.com/some-folder/index.html

      如果您转到http://example.com/stuff/we/sell,您将收到一个错误,因为stuff 不是有效目录。

      在您的 SPA 中,您可能会有一些路由系统,可以让您四处移动并更改 Url,而无需重新加载。因此,如果您使用您的 SPA,然后进行真正的重新加载,您应该仍然会回到原来的位置。

      这将如何工作取决于您的服务器。例如,对于 apache,您可以通过 .htaccess 提供重写。

      <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.html$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.html[L]
      </IfModule>
      

      无论你的 url 是什么,使用它,你总是会在 http-root index.html 结束。然后您的 SPA 可以接管;读取 url 并显示相应的数据。

      恕我直言,在服务器上解决此问题是解决您问题的合适方法。

      【讨论】:

      • 没错,关键是 SPA 需要知道用户在他/她进入 frame-app 的那一刻的位置,以便“恢复”路由。在您的具体示例中(按原样正确):用户将返回 index.html 页面(在我的原始问题中:example.com/A/overview),而 SPA 知道用户在其中(保留对我的问题的引用)example.com/A/stuff/we/sell/jackets.
      • 显然我还是不太明白你想做什么?你到这里来对吧? http://example.com/A/stuff/we/sell/jackets 所以 apache 说它不是一个有效的文件,但是嘿,我有一个“捕获”所有东西......所以我只会将 index.html 的内容发送给你,但保留 url 原样......然后你的 SPA 开始了正常读取 url 并可以决定显示什么......应该解决你的问题吗?如果不是,也许你可以用不同的方式来描述它?也许一些截图?也不确定“关闭视图”是什么意思,它是一个对话框吗?
      • 抱歉,如果不清楚。我想念你,在你的新评论中,你怎么能做到这一点:所以我只会给你发送 index.html 的内容,但*留下网址原样*
      • 这真的取决于您使用的服务器系统。例如在上面的 apache 示例中,您可以转到 http://example.com/something/new/,但您仍会从 http://example.com/index.html 获得 HTML
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2014-02-09
      • 2020-05-12
      • 2019-07-09
      • 1970-01-01
      相关资源
      最近更新 更多