Polymer app-route:拦截刷新页面

AMC*_*AMC 7 polymer-2.x app-route

我正在努力摆脱目前的局面:我们在某个服务器上部署了聚合物SPA(A)并绑定到某个网址:http://example.com/A,我们需要显示遗留页面的暂时使用旧应用程序,为了这样做,新应用程序(B)已经开发并绑定到不同的URL(http://example.com/B).

B做的是框架遗留应用程序的页面并公开一个按钮,其目的是通过访问document.referrer值并重新加载页面返回到先前的位置,问题是A是SPA,URL不是存在于服务器上.

更详细:

  1. 用户登录应用程序A(http://example.com/A/overview)
  2. 用户使用SPA并最终获得由路由管理的特定网址(http:// example/A/stuff/we/sell/jacket)
  3. http://example.com/A/stuff/we/sell/jackets页面中,有一个指向应用程序B的链接,构成显示夹克的遗留应用程序页面
  4. 用户点击链接并转到http://example.com/ B/legacy/jacket,此时document.referrer等于http://example.com/ A/stuff/we/sell/jacket
  5. 用户点击按钮关闭视图,应用程序B将窗口的位置设置到document.referrer,试图从他/她来自的地方降落用户.
  6. 作为应用程序A SPA,服务器上不存在URL http://example.com/ A/stuff/we/sell/jackets,用户(正确地)得到404.

所以问题是:有没有办法拦截应用程序路由中window.location变量的变化,以避免页面的完全刷新,并将用户置于链接所在的页面?

daK*_*moR 3

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

\n\n

如果您确实有 SPA,您希望所有 URL 都转到您的应用程序外壳(通常是您的 index.html)。

\n\n

例子:

\n\n
http-root\n\xe2\x94\x9c\xe2\x94\x80 some-folder\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 index.html\n\xe2\x94\x94\xe2\x94\x80 index.html\n
Run Code Online (Sandbox Code Playgroud)\n\n

例如,如果您正在运行 apache,您可以访问:

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

如果你去http://example.com/stuff/we/sell你会得到一个错误,因为stuff它不是一个有效的目录。

\n\n

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

\n\n

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

\n\n
<IfModule mod_rewrite.c>\nRewriteEngine On\nRewriteBase /\nRewriteRule ^index\\.html$ - [L]\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule . /index.html[L]\n</IfModule>\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用这个无论你的 url 是什么,你总是会到达 http-root index.html。然后您的 SPA 就可以接管;读取 url 并显示适当的数据。

\n\n

恕我直言,在服务器上解决这个问题是解决您问题的正确方法。

\n