Microsoft Edge中onLoad/onSave事件失效,求兼容替代方案
解决Microsoft Edge中onSave事件兼容问题(替代IE废弃的onSave)
我正在修正JavaScript代码以兼容Microsoft Edge,此前在Internet Explorer中正常运行的onLoad和onSave事件在Edge中无法工作。已知onSave事件已被废弃,我已找到onLoad事件的替代实现方式,但仍需获取onSave事件的替代方案。
原.Ascx页面代码
<div id="divMenu" onchange ="saveState()" onLoad ="loadState()" class="saveHistory" style="display:none;"></div>
原JS文件代码
function loadState(){/* Code */} function saveState(){/* Code */}
已实现的onLoad替代代码
<script type="text/javascript"> window.onload = loadState('divMenu'); </script>
onSave事件的替代方案
由于IE专属的onSave事件已被废弃,在Edge等现代浏览器中需要根据业务场景选择合适的替代方案:
- 页面关闭/刷新时触发保存:如果原
onSave是在页面关闭或刷新时执行状态保存,可使用beforeunload事件:
window.addEventListener('beforeunload', function(event) { saveState(); // 注意:现代浏览器大多会忽略自定义提示语,仅用于触发事件逻辑 });
- 元素状态变更时触发保存:如果原
onSave是绑定在div的onchange上(div默认无onchange事件),需明确触发时机,比如在菜单操作、内容修改后手动调用saveState(),或给实际交互元素绑定事件:
// 示例:给菜单按钮绑定点击事件触发保存 document.getElementById('menuButton').addEventListener('click', function() { saveState(); });
- 监听浏览器历史变更:如果是和页面历史状态相关的保存,可使用
popstate事件配合history.pushState管理状态:
// 保存状态时更新历史记录 function saveState() { // 你的保存逻辑 const state = { menuState: 'your-state-data' }; history.pushState(state, '', window.location.href); } // 监听历史状态变化 window.addEventListener('popstate', function(event) { if (event.state) { // 恢复状态逻辑 loadState(); } });
内容的提问来源于stack exchange,提问作者radja01
相关产品推荐
相关产品推荐

