我是一个不熟悉前端技术的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

为什么会这样呢?我该如何解决?

最佳答案

我对您的问题进行了一些研究,并且由于您提到您使用的是第三方脚本(对于开发人员而言,这并不总是最好的),所以我发现了一些可以帮助您摆脱它的方法。

此方法将需要您删除已有的第三方脚本(或对其进行注释)。由于我们将以其他方式处理后退按钮。

在脚本标记中,您具有以下代码:

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那里获得了这些信息,并在其中添加了针对您特定问题的解释和代码。希望能帮助到你。

注意:如果仍然无法使用,则您需要提供代码的更开放的上下文,因为可能还有其他原因导致其无法使用。

10-07 17:39