0

基本上,在我的 chrome 扩展中,它会在域中的某些页面上创建重定向。这确实是我希望它做的行为。我不想改变它——这是必需的。

相反,我想做的是拥有它,以便当用户按下后退按钮时,它会在脚本运行时返回两次 - 从而规避问题。

请参阅下面的示例:

1)用户访问http://domain.com/page1.html
2)用户点击页面http://domain.com/page2.html
3)浏览器扩展脚本使其重定向到http://domain.com /page2.html&aaa立即。
4a)当用户按一次返回按钮时,它会返回到http://domain.com/page2.html,然后将他们重定向回http://domain.com/page2.html&aaa,让他们感到沮丧。
4b)当用户连续两次按下返回按钮时,它会像他们打算做的那样返回到http://domain.com/page1.html 。

我想要做的是添加一些导致它的东西,以便在任何页面上运行导致重定向的javascript,也使得当用户单击一次后退按钮时,它会返回两次。


更新:

这是我正在做的事情:

function backTwo()
  {
  window.history.go(-2)
  }

if {
  [SOME CODE TO SAY THAT THE STRING &aaa EXISTS IN THE URL]
}

then {
  [SOME CODE TO SAY RUN backTwo() FUNCTION]
}

else {
  [SOME CODE TO SAY DO NOTHING]
}

我不确定下一步该怎么做。我不是真正的 javascript 编码器,我只是想将此功能添加到扩展程序中。

如果你能给我举个例子,那会很有帮助。

4

2 回答 2

3

不要使用背景页面来修改历史导航行为,而是通过不首先创建历史条目来避免问题。

例如,通过location.replace内容脚本中使用:

// Running on http://domain.com/page2.html
location.replace('http://domain.com/page2.html&aaa');

清单文件:

  "content_scripts": [{
      "matches": ["*://domain.com/page2.html"],
      "js": ["redirect.js"],
      "run_at": "document_start",
      "all_frames": true
  }],

编辑
您声称location.replace不从服务器获取资源。这不是真的。您遇到的是您的页面被浏览器缓存。要确保从服务器重新加载页面,请使用缓存清除方法,例如将随机查询字符串参数附加到您的 URL:

// Running on http://domain.com/page2.html
location.replace('http://domain.com/page2.html?aaa&_t=' + new Date().getTime());

在前一种情况下,您将导航到http://domain.com/page2.html?aaa&_t=1234.... 的值1234...相当独特,因此该页面永远不会从浏览器的本地缓存中获取。

你控制服务器吗?如果是,您还可以通过标头禁用缓存。有关此主题的更多信息,请参阅确保网页未在所有浏览器中缓存

于 2013-04-30T08:00:25.403 回答
2

查看 onpopstate,您可以操作浏览器历史记录并推送/弹出浏览器的状态

https://developer.mozilla.org/en-US/docs/DOM/window.onpopstate

于 2013-04-30T02:27:34.410 回答