【问题标题】:Javascript not working in Safari when navigating to a new url导航到新网址时,Javascript 在 Safari 中不起作用
【发布时间】:2015-03-26 16:28:54
【问题描述】:

在支付账单时,我会显示一个静态引导弹出窗口,告诉用户等待。用户单击调用 js 函数的按钮以显示弹出窗口,然后将用户重定向到在服务器端运行计费的 url。它适用于除 Safari 之外的所有浏览器。当我单击 Safari 中的按钮时,不会出现弹出窗口,它只是导航到计费页面。我注意到如果我删除导航线 (location.replace('/billingpage/pay/');),弹出窗口将在 safari 中正确显示。似乎如果 javascript Safari 中有导航不会打扰显示弹出窗口。

我还尝试将导航放在另一个函数中,并在超时后调用它,如下所示:window.setTimeout(navigate(), 1000);但这也不起作用。

function pay_now() {
  document.getElementById("paynow_btn").disabled=true;
  document.getElementById("paynow_btn").style.opacity = 0.25;
  var wait_title = "Please wait while the transaction is processed...";
  var wait_message = "<br/><br/><br/><br/> ";
  document.getElementById("staticModalLabel").innerHTML = wait_title;
  document.getElementById("staticModalBody").innerHTML = wait_message;
  var spinner = new Spinner().spin();
  document.getElementById("staticModalBody").appendChild(spinner.el);
  $('#staticPopupModal').modal({
    backdrop: 'static',
    keyboard: false
  });
  location.replace('/billingpage/pay/');
}
 &lt;a href="javascript:pay_now();" id="paynow_btn" class="btn btn-green"&gt;PAY&lt;/a&gt;

【问题讨论】:

  • 应该尝试过window.setTimeout(navigate, 1000); - 使用navigate(),您将立即调用该函数并将其结果传递给setTimeout()
  • 谢谢Pointy,这实际上解决了它。现在我只是好奇是否有办法在没有超时的情况下做到这一点。 Safari 解释 javascript 的方式似乎确实存在时间问题。
  • 这与其说是一个时间问题,不如说是浏览器对它正在处理的事件的了解程度的问题。通过使用超时(它可能会使用 0 而不是 1000 的延迟值),您可以将该页面重新加载到一个单独的事件线程中。

标签: javascript django twitter-bootstrap safari navigation


【解决方案1】:

这不应该是每个 javascript 进程的预期行为吗? 无论如何,在你的情况下,我肯定会选择 jquery deferred 和 promise。这是fiddle,我使用 jqueryui 进行模态对话框。

在代码中基本上是这样的。

var dfd = $.Deferred();

$("#dialog-confirm").dialog({
    resizable: false,
    height: 140,
    modal: true,
    buttons: {
        "go to billing page": function () {
            $(this).dialog("close");
            dfd.resolve();
        },
        Cancel: function () {
            $(this).dialog("close");
            dfd.reject();
        }
    }
});

$.when(dfd).then(

function () {
    alert('go to billing page');
},

function () {
    alert('nope');
});

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2015-11-25
    相关资源
    最近更新 更多