我是不熟悉前端技术的Java开发人员,所以我希望这个问题不要太愚蠢。我在html页面上内联了2个脚本。
<script type="text/javascript">
function printReceipt(orderId,email) {
var printWindowSettings;
var browserUserAgent = navigator.userAgent;
if (browserUserAgent.indexOf("Chrome") > -1) {
printWindowSettings = "status=0,toolbar=0,menubar=0,height=500,width=1000,scrollbars=1";
} else {
printWindowSettings = "status=0,toolbar=0,location=0,menubar=0,height=500,width=1000,scrollbars=1,noopener=1";
}
var path = "/shop/printReceipt?orderid="+orderId;
if (email!=null)
path+="&email=" + email;
var docPrint = window.open(path, '_blank', printWindowSettings);
if (docPrint == null) console.log("window open returned null");
}
</script>
<script type="text/javascript">
bajb_backdetect.OnBack = function()
{
window.history.back=function(){
console.log("Back Button Pressed.")
document.location='/shop/shoppingCart.seam';
}
}
</script>
在锚标签的printReceipt()
处理程序中调用 onClick()
。
<div class="pull-left" style="padding-bottom:20px;"><a href="#" onclick="javascript:printReceipt(apaOrder.orderId);" class="btn btn-primary-custom"><i class="fa fa-print" aria-hidden="true" style="padding-right:6px;"></i>Print Receipt</a></div>
我发现的是,当调用printReceipt()
时,也会调用以下脚本(用于管理后退按钮)。因此,当调用printReceipt()
时,我的浏览器导航到/shop/shoppingCart.seam
。
为什么会这样?我该如何解决?
答案 0 :(得分:1)
我对您的问题进行了一些研究,并且由于您提到您使用的是第三方脚本(对于开发人员而言,这并不总是最好的),所以我发现了一些可以帮助您摆脱它的东西。 / p>
此方法将需要您删除已经拥有的第三方脚本(或对其进行注释)。由于我们将以其他方式处理后退按钮。
在脚本标记中,您具有以下代码:
bajb_backdetect.OnBack = function() {
window.history.back = function() {
console.log("Back Button Pressed.")
document.location = '/shop/shoppingCart.seam';
}
}
用以下代码替换它:
(function(window, location) {
history.replaceState(null, document.title, location.pathname+"#!/history");
history.pushState(null, document.title, location.pathname);
window.addEventListener("popstate", function() {
if(location.hash === "#!/history") {
history.replaceState(null, document.title, location.pathname);
setTimeout(function(){
location.replace("/shop/shoppingCart.seam"); //Here goes your URL
},0);
}
}, false);
}(window, location));
现在,如果确实删除了第三方脚本(或添加了注释),则应该能够看到预期的行为。
如果您想了解更多有关此的信息,则已经回答了一个与此问题类似的问题,即处理窗口后退事件的最佳方法是自己完成。
我从this answer获取了此信息,并在其中加上了针对您特定问题的解释和代码。希望对您有所帮助。
注意: 如果仍然无法使用,则您需要提供代码的更开放的上下文,因为可能会导致其他原因不起作用。
答案 1 :(得分:0)
单击锚点可能导致浏览器跟随该链接。
给出此:
<a href="" onclick="printReceipt(10, 'person@site.com')">click me</a>
单击该链接将运行该功能,然后页面将重新加载。您的后退检测脚本将注意到该页面正在被卸载并且正在处理(显然)。
将其更改为:
<a href="" onclick="printReceipt(10, 'person@site.com'); return false">click me</a>
为了防止链接被跟踪。