Edge未经点击预载功能型URL触发误操作,求非替换<a>标签的方案
Edge浏览器预载触发操作锚点的问题解决方法
确实有不少开发者遇到过Windows 11环境下Edge浏览器的这类问题——浏览器的智能预加载机制会主动预取它判定用户可能点击的链接,哪怕是带删除、修改这类敏感操作参数的GET请求锚点,导致页面刚加载就触发了操作。
不用替换成表单的解决方法:
- 给操作类锚点添加
rel="noopener noreferrer nofollow"属性:这个组合属性会告知浏览器不要追踪、预取该链接,多数现代浏览器(包括Edge)会识别并跳过对这类链接的预加载。示例:<a href="?id=123&action=delete&csrf=xyz" rel="noopener noreferrer nofollow">删除</a> - 添加
fetchpriority="low"属性:降低该链接的预加载优先级,减少被浏览器提前抓取的概率,配合上面的rel属性效果更好:<a href="?id=123&action=delete&csrf=xyz" rel="noopener noreferrer nofollow" fetchpriority="low">删除</a> - 若允许少量JavaScript辅助,可给锚点添加
onclick事件确保只有点击才触发,同时阻止默认行为后手动跳转:
这种方式能彻底避免预加载触发,因为只有用户点击时才会发起请求。<a href="?id=123&action=delete&csrf=xyz" onclick="event.preventDefault(); window.location.href=this.href;">删除</a>
另外需要注意:从HTTP语义来说,删除这类修改资源的操作本就不该用GET请求,GET应该用于获取资源而非修改。如果长期维护的话,还是建议逐步将这类操作迁移到POST表单或AJAX请求,从根源上避免这类预加载或误触发的问题。
内容的提问来源于stack exchange,提问作者BurninLeo
相关产品推荐
相关产品推荐

