如何实现跳转至第三方网页的指定ID锚点对应区块?
问题根因
你当前的写法完全符合锚点跳转的标准规范,跳转后无法滚动到指定区块,基本都是目标站点gothere.com本身的逻辑导致:
- 目标站点是单页应用(SPA),页面内容由JS动态渲染,浏览器解析锚点时,
id="rightHere"的元素还没挂载到DOM上 - 目标站点主动禁用了默认锚点滚动逻辑
- 跨域安全策略限制了源站对第三方页面行为的操控权限
可行方案
方案1:可和目标站点侧协商配合的场景(最稳妥)
源站跳转时额外携带查询参数标识要滚动的元素id,目标站点增加对应的滚动处理逻辑即可。
源站(mehere.com)跳转代码
// 按钮点击跳转逻辑 function Redirect() { // 同时带锚点+查询参数,兼容目标站后续适配 window.location.href = "https://www.gothere.com?scrollTarget=rightHere#rightHere"; }
目标站(gothere.com)新增处理逻辑
// 等待页面所有资源/动态内容加载完成后执行滚动 window.addEventListener('load', () => { const urlParams = new URLSearchParams(window.location.search); const targetId = urlParams.get('scrollTarget'); if (!targetId) return; const targetEle = document.getElementById(targetId); // 匹配到目标元素后执行滚动 targetEle?.scrollIntoView({ behavior: 'auto', // 需要平滑滚动可以改成smooth block: 'start' }); });
方案2:无法和目标站点配合的场景
如果没有权限修改目标站点的代码,首先可以先做基础校验:
- 直接在浏览器地址栏输入完整带锚点的地址
https://www.gothere.com#rightHere,确认是否能滚动到对应区块 - 核对目标页面
rightHere的id拼写、大小写完全匹配,确认该元素不是动态生成的shadow DOM元素
如果直接访问带锚点的地址也无法滚动,那么源站侧没有任何合规的JS方案可以实现需求——浏览器的跨域安全规则禁止源站点操作第三方跳转页面的DOM和交互行为,强行尝试的方案都会被浏览器拦截。
内容的提问来源于stack exchange,提问作者Judoboy Alex
相关产品推荐
相关产品推荐

