我有一个处理程序注册的事件有人点击一个订单,这基本上创建了OrderDetailPresenter,传递在订单ID(包含在ShowOrderDetailEvent),然后调用History.newItem(“orderDetails”).
这有几个主要的缺点:这个新创建的历史记录步骤不知道传递了哪个订单ID.例如,如果有人将订单详细信息页面(或在浏览器中返回,然后转发),他们将获得一个空的没有订单的页面.
所以我的问题是:是否应该像History.newItem(“orderDetails?id =”id)这样做,然后解析我的值更改侦听器中的历史记录?如果是这样,最好的做法,一个API或者库,以这种方式解析和格式化参数到一个字符串?
解决方法
有一点建议,尽管如果可能的话,你应该避免使用一个需要你在历史记录项目字符串中使用百分比转义的方案.原因是当location.href结束时,什么location.hash返回,说#<@@因浏览器而异.例如,Chrome返回#<@@; Firefox返回#< @@.设置location.hash可以具有类似的浏览器特定效果. GWT的历史令牌机制依赖于location.hash,并且不会使浏览器行为的这种差异正常化.最终的结果是,如果您使用需要百分比转义的东西,您将获得无法通过浏览器共享的网址 – 如果在其他页面上要生成跳转到GWT中特定位置的链接,则会出现此问题应用程序,或者您希望用户共享链接到您的GWT应用程序内的URL. (或者您的用户安装Chrome时,从Firefox中导入他们的书签,指向您的webapp中的特定位置,突然之前书签不起作用) 对于偏执狂,我会避免放任何?,#,&%,<或>您的历史记录字符串中的字符.但是,像orderDetails / oid = 12313378这样的字符串应该是很好的,并且跨浏览器.
(编辑以澄清我正在谈论的问题是处理在多个不同浏览器中使用相同的URL,而不是在各种浏览器中使用历史记录方法)