Polymer app-route:拦截刷新页面

时间:2018-02-16 14:59:16

标签: polymer-2.x app-route

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

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

更详细:

  1. 用户登录应用程序A(http://example.com/A/overview
  2. 用户使用SPA并最终获得由路由管理的特定网址(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 < / strong> / stuff / we / sell / jackets
  5. 用户点击按钮关闭视图,应用程序B将窗口的位置设置为document.referrer,试图让用户从他/她来自的地方着陆。
  6. 作为应用程序A SPA,服务器上不存在网址http://example.com/ A / stuff / we / sell / jackets,用户(正确)获得404。
  7. 所以问题是:有没有办法拦截应用程序路由中window.location变量的变化,以避免页面的完全刷新,并将用户置于链接所在的页面? / em>的

1 个答案:

答案 0 :(得分:4)

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

如果您有SPA,您希望所有网址都转到您的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>

使用此功能无论您的网址是什么,您都将始终以http-root index.html结束。然后您的SPA可以接管;阅读网址并显示相应的数据。

imho在服务器上解决这个问题是解决问题的合适方法。