Firefox书签小工具单次点击实现网页跳转及下拉提交方案咨询
解决Firefox书签工具单次点击完成页面跳转+表单提交的问题
你当前的代码需要点击两次才能完成操作,核心原因是:window.open 切换页面后,后续的DOM操作代码其实是在原页面执行的,而非新打开的目标页面。第一次点击仅完成页面跳转,第二次点击才会在目标页面触发表单操作。
下面提供两种可行的单次点击解决方案:
方案一:监听新窗口加载事件(适合同源场景)
如果你的书签工具在与目标页面同源的页面执行,可以直接获取新窗口对象并监听其加载完成事件:
let targetWin = window.open("https://www.foreca.se/Sverige/Stockholm/Stockholm", '_self'); targetWin.onload = function() { targetWin.document.querySelector("#stationForm > select.stationSelect > option[value='1020002460']").selected = true; targetWin.document.getElementById("stationForm").submit(); };
方案二:绑定页面加载完成事件(兼容跨域场景)
若存在跨域限制(浏览器会阻止原页面访问新窗口DOM),可以将逻辑封装为自执行函数,在页面跳转后自动监听目标页面的加载状态:
javascript:(function(){ window.location.replace("https://www.foreca.se/Sverige/Stockholm/Stockholm"); function executeFormAction() { try { document.querySelector("#stationForm > select.stationSelect > option[value='1020002460']").selected = true; document.getElementById("stationForm").submit(); document.removeEventListener('DOMContentLoaded', executeFormAction); } catch(err) {} } document.addEventListener('DOMContentLoaded', executeFormAction); })();
说明
- 方案二使用
DOMContentLoaded事件替代固定延迟,能更精准地在页面DOM准备就绪后执行操作,避免因网络速度差异导致的延迟过长或过短问题; - 最终使用时需要将代码压缩为单行(可在线搜索JS压缩工具),再添加到书签的URL中。
内容的提问来源于stack exchange,提问作者loxia_01
相关产品推荐
相关产品推荐

