如何运行窗口.历史记录(javascript),如果用户点击后退按钮
How to run window.history (javascript) if user clicks back button?
我想运行以下命令:
window.history.go(-2);
在页面上的脚本正在运行,当用户点击后退按钮在Chrome扩展。我该怎么做呢?
(注意:有一个页面链接,但这是一个不同的情况,然后那个问题)
后退按钮触发一个浏览器级别的事件,这意味着它不能在content script
级别被监听。然而,你可以在背景脚本中听它,但只能以有限的方式。您知道前进或后退按钮被按下的唯一时刻是在chrome.webNavigation.onCommitted
事件期间。在这一点上,在导航过程中,新的页面已经至少部分加载,新的document
已经交换了进来。这意味着我们使用后退按钮所做的任何更改都只会在上一页加载后发生,而不是最无缝的体验。
确定返回按钮是否被按下,然后返回两次的示例如下:
内容脚本chrome.runtime.sendMessage({method:'setReferrer',referrer:document.referrer});
background.js
var referrer;
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
if(message.method == 'setReferrer')
referrer = message.referrer;
});
chrome.webNavigation.onCommitted.addListener(function(details) {
if(details.url == referrer && details.transitionQualifiers[0]=='forward_back')
chrome.tabs.executeScript(details.tabId,{code:'window.history.go(-1);'});
});
使用referer获取前一个url的知识,并将其与当前加载页面的url进行比较。唯一不正确的情况是,如果您使用转发按钮转到与前一页相同的页面,我认为这种情况极不可能发生。这样做的限制是,在再次返回之前需要加载或至少部分加载前一个页面。您可能会比较chrome.webNavigation.onBeforeNavigate
事件中的url,但这会导致一堆误报,并使再次直接导航到该特定页面变得非常困难。
一个更优雅的解决方案是按照Rob的建议,在中间页面使用location.replace
,这样就不会有特定页面的历史记录,并且点击一次就可以达到您想要的效果。
相关文章:
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 如果用户没有更改,则表单值为空
- 如果用户输入的长度小于最小长度,则显示错误消息
- 如何知道用户已经重新加载了网页,使用jquery.如果用户重新加载网页,
- 如果用户回答是,我想关闭网站
- Javascript-如果用户没有响应,则关闭确认消息
- 如果用户不关闭弹出窗口'没有提供任何回应
- 如果用户选择离开网页,如何删除记录
- 如果用户未选中复选框或选择按钮,如何为复选框或单选按钮设置一些默认值
- 如果用户的浏览器早于以下版本,则显示一条消息:IE 10、Firefox 39、Chrome 39、Opera 8
- 如果用户在输入上按 Enter 键,则取消挖空速率限制扩展器
- 如果用户由于第二个处理程序中的对话框而停留在页面上,则跳过加载前处理程序
- Javascript复选框验证:如果用户没有't选中特定复选框
- 如果用户点击“;提交”;无需填写表格
- 如果用户登录不起作用,则运行脚本
- 如果用户单击其他按钮,则禁用表单元素
- 如何在HTML、JS中重定向,如果用户关闭“;window.open()"-对话
- 如果用户尚未登录Angular JS,请重定向至登录页面
- 如果用户更改了url并且呈现了错误的视图
- 如果用户更改下拉选择,jQuery将删除单选按钮/输入选项