如果您访问链接http://www.feriebolig-europa.dk/,则会在页面加载后显示尾随/#。
这基本上是这个脚本的一个问题:
<script type="text/javascript" src="https://p14943.atraveo.com/index.php?controller=partnerintegration&action=default&width=1080&height=1000&lg=da&cur=DKK&versionname=Spanien_landingpage"></script>
其中包含3种不同的javascripts。影响脚本是:
http://p14943.atraveo.com/website/static/js/partnerFrame.js
来源的剧本:
<script type="text/javascript">
window.addEventListener("message", function(a) {
if (!("website" !== a.origin.substr(a.origin.length - 7) && ".atraveo.com" !== a.origin.substr(a.origin.length - 12) && ".atraveo.de" !== a.origin.substr(a.origin.length - 11) && ".atraveo-test.de" !== a.origin.substr(a.origin.length - 16)))
if ("scrollUp" == a.data) window.location.hash = "atraveo", window.location.hash = "";
else if ("scrollToFrame" == a.data) {
if (a = document.getElementById(atraveoFrameId)) a = a.offsetTop, document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop =
a : document.body.scrollTop = a
} else document.getElementById(atraveoFrameId).style.height = a.data + "px"
}, !1);
</script>
以下一行是更具体的可能原因:
if ("scrollUp" == a.data) window.location.hash = "atraveo", window.location.hash = "";
如果我添加:
window.location.href.replace('#', '');
用线来解决问题。
但是,由于我无法控制第三方网站,我想知道是否可以从我这边做任何事情?
答案 0 :(得分:0)
try {
//check wether it's working + initial cleanup
history.replaceState( history.state, document.title, location.href.replace(/#$/,"") );
//if the code didn't throw yet, add the event-listener
addEventListener("hashchange", function(){
var href = location.href, regex = /#$/;
if(regex.test(href))
history.replaceState( history.state, document.title, href.replace(regex, "") );
}, false);
}catch(err){}
历史操作可能在某些浏览器中不可用,这就是为什么我将代码包装在try-catch-block中并触发history.replaceState()
的原因。
另一方面,如果此代码在较旧的浏览器中失败,则尾随#
可能没有吸引力,但它并不重要,需要不惜一切代价修复。