什么时候是 window.location.href = url 被执行

When is window.location.href = url gets executed?

本文关键字:url 执行 href window location 什么时候      更新时间:2023-09-26

对于以下代码

window.location.href = url;
$(window.document.body).append(compiledTemplate);

我想在现有窗口中$(window.document.body).append(compiledTemplate); to be appended on the new Page which will get opened, but it appends the编译模板',然后加载指定的网址

有没有办法做到这一点。

注意:要传递的 url 已经定义了其表单加载事件。我不想覆盖它。

什么时候执行window.location.href = url?

非常接近立即。它告诉浏览器开始加载新页面的过程。当前页面及其上的代码将继续运行,直到新页面开始加载。更多内容见下文。

我希望$(window.document.body).append(compiledTemplate);附加到将打开的新页面上。

你不能。当前页中的代码无法作用于下一页。若要在下一页上执行操作,必须在页面中具有代码。

最好的办法是让当前页面以其他方式向新页面提供信息:

  • 通过查询字符串参数
  • 通过本地存储或会话存储
  • 通过饼干(漂白)

。然后让页面上的代码追加内容。


如果您这样做是为了响应用户生成的事件,则可以改为执行以下操作:

var wnd = window.open(url);
$(wnd).load(function() {
    $(this).append(compiledTemplate);
});

。但它会在新页面(可能是选项卡)中打开 URL 并使当前窗口保持打开状态,并且它仅适用于来自同一来源的页面。


例如,如果你在页面上有这个:实时示例

<input type="button" id="the-button" value="Click">
<script>
  (function() {
    "use strict";
    $("#the-button").click(function() {
      var counter = 1;
      location.href = "http://stackoverflow.com";
      $("<p>Set, counter = " + counter + "</p>").appendTo(document.body);
      setInterval(function() {
        ++counter;
      $("<p>Counter = " + counter + "</p>").appendTo(document.body);
      }, 50);
    });
  })();
</script>

当您单击该按钮时,您会看到行设置运行后的代码location.href显示"设置,计数器= 1",然后可能还有几行"计数器= x",然后最终页面将被Stack Overflow替换。此时,旧页面的代码已终止。它无法对新页面执行任何操作。