使用Safari v。12(+)后退按钮返回时,是否会触发任何事件?

时间:2018-10-31 12:33:41

标签: javascript html5 safari mobile-safari

我试图找到一些句柄来检测Safari中的“后退”按钮后是否显示了页面。我在StackOverflow内部和外部都经过了很多建议,但是其中大多数建议已经使用了好几年,而且似乎都不再适用于Safari 12.0。

我特别尝试过onpageshow

window.onpageshow = function(event) {
  console.log("Onpageshow fired, event.persisted: ", event.persisted);
}

...和onreadystatechange

document.onreadystatechange = function () {
  console.log("Onreadystratechange fired, readyState: ", document.readyState);
}

在初始页面加载期间,两者均按预期方式触发,但后退按钮后均未触发。自然,DOMContentLoadedload都不射击。

我的问题是输入文本字段,该字段具有自定义的自动完成实现。我必须为该字段设置自动完成off,因为否则浏览器的自动完成将显示在自定义建议的上方。 (Autocomplete=offhttps都已在其他地方说明过,原因是为什么前进/后退期间表单上的文本字段会被清除。)我正在通过将值存储在另一个(未显示)中来解决此问题输入字段,然后使用javascript从此处恢复可见字段。在Chrome中使用DOMContentLoaded可以像超级按钮一样工作,但是我找不到任何会在最新(也是移动版)Safari中触发并让我运行替换事件的事件。

否则,Safari中的后向缓存非常有效并且运行非常快,因此我也不想禁用它。

编辑:仍然无法回答我的问题,但是找到了解决我问题的方法。万一有人遇到同样的问题:向前/向后的文本输入值的持久性实际上取决于autocomplete设置。因此,如果我在输入获得焦点时为表单设置了autocomplete=off而不是静态设置:

myInput.addEventListener("focus", function() {
  document.getElementById('my-form').autocomplete="off";
});

...然后在输入失去焦点时重新打开:

myInput.addEventListener("blur", function() {
  document.getElementById('my-form').autocomplete="on";
});

...文本字段内容在Chrome和Safari中(在Mac上为2018年11月版本)均持续访问另一个链接并返回带有后退按钮。

我仍然很乐意找到原始问题的答案。

0 个答案:

没有答案