2016-08-18 24 views
0

我有一个公司Wiki由MediaWiki提供支持。我已经编写了代码来添加页面锁定功能,这样当用户编辑页面时,他们会在页面上获得15分钟的锁定时间,可以在任何时间到期之前对其进行更新。通过浏览器后退按钮访问表单不会触发“确认表单重新提交”

如果用户编辑页面,然后单击保存,然后单击浏览器的后退按钮返回到编辑窗体,一切看起来很正常,用户认为一切正常,但这里是踢球者:它不在页面上创建一个新的锁。该消息告诉用户在页面上有一个锁,但我认为这只是因为它的缓存版本的页面;消息中的到期时间是从开始的第一个编辑的时间,而不是使用后退按钮的过期时间。

我曾尝试加入HTML标签meta到页面head标签内部缓存失效/不缓存编辑页面,但是这并不工作,因为MediaWiki的PHP页面生成覆盖此。

现在我有一个非常草率的修复;我使用JavaScript来模拟按下浏览器前进按钮,例如在编辑页面上向前移动历史记录。如果一个较新的历史项目不存在(例如,他们点击了实际的“编辑”按钮而不是使用浏览器后退按钮),它只是不做任何事情,但如果他们通过后退按钮访问编辑页面,它会简要显示大约一秒钟,直到JavaScript加载,然后在历史记录中向前重定向(将它们放回到之前的位置,然后再按下后退按钮)。是的,这是有效的,但在我看来,这是一个非常糟糕的解决方案,因为它不是非常无缝/用户友好的,可能会让用户感到困惑,或使他们认为浏览器出现问题。

更好的解决方案是强制用户重新提交表单,从而打开编辑页面的“新鲜”版本,但我不确定它为什么还没有这样做。我的意思是,当用户通过浏览器后退按钮访问编辑页面时,我希望它显示“确认表单重新提交”错误页面。谷歌浏览器,例如:

error example

我认为这将迫使形式的重新提交,我相信随后将创建一个实际页锁解决这个问题。纠正我,如果我错了。

我不认为太多的页面锁定代码是非常相关的,因为问题的原因只是后退按钮将它们带到缓存版本的页面而不是“新鲜”版本,但如果您认为不然,请随时索要。只要让我知道要发布的代码的哪些部分,我会添加它们。

+0

发布后,对同一页面使用重定向。 – devpro

+0

um。什么?你能澄清你的意思吗? –

回答

0

我认为@devpro评论与你的问题有关,但其意义应该颠倒。 Mediawiki 已有具有防止用户稍后单击“刷新”或“返回”按钮时看到“重新提交”警告的机制 - 提交表单后,它将用户(通过302重定向)重定向到编辑的页面。

这样,如果用户决定在编辑后立即刷新页面,或者他发布了表单,然后导航到另一个页面并按下“返回”按钮 - 他不会再次提交表单。

要改变这种行为几乎是不可能的(它深深地埋在了Mediawiki核心中),尽管如此,事件如果可能的话 - 你不应该这样做直到你想让你的编辑完全混淆。

有一个在后端侧无解,因为表单页从浏览器缓存加载的,但你仍然可以阻止这种使用js和Mediawiki的JS接口可用于帮助:

创建扩展,增加了JS脚本“查看”动作,使其跟踪变量wgPostEditsee more),只有在保存页面后才能填充。一旦设置了此变量 - 当用户尝试导航时,使用this trick显示警告。

1

找到一些钩子给你OuputPage(我不熟悉它们,但可能OutputPageBeforeHTML?),并在编辑页面上调用OuputPage::enableClientCache(false)

相关问题