【问题标题】:When is window.location.href = url gets executed?window.location.href = url 什么时候执行?
【发布时间】:2015-01-28 10:58:18
【问题描述】:

如下代码

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 thecompiledTemplate` 然后加载指定的url

有没有办法做到这一点。 ?

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

【问题讨论】:

  • 如果我理解正确,为什么不简单地有两个脚本,一个在当前页面(更改到新页面),一个在新页面(附加内容)。
  • 这是不可能的。您不能直接从当前修改后续页面的状态。但是,您可以通过查询字符串发送信息,使用 localStorage 或 cookie,或者从服务器端数据库中检索它。然后下一页可以根据该信息采取行动。
  • 如果你想改变document.body的内容和浏览器中可见的URL你应该看看history.pushState()

标签: javascript jquery load append window.location


【解决方案1】:

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

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

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

你不能。当前页面中的代码不能作用于下一页。要在下一页上采取行动,您必须在那个页面中有您的代码。

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

  • 通过查询字符串参数
  • 通过本地存储或会话存储
  • 通过 cookie (blech)

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


如果您这样做是为了响应用户生成的事件,您或许可以这样做:

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

...但它会在 new 页面(可能是新标签页)中打开 URL 并保持当前窗口打开,并且它仅适用于来自同一来源的页面。 p>


例如,如果您在页面上有这个:Live Example

<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 运行后显示“Set, counter = 1”,然后可能还有几行“counter = x” ,然后最终页面将被 Stack Overflow 替换。至此,旧页面的代码已经终止。它不能对新页面做任何事情。

【讨论】:

  • 虽然当前代码无法作用于下一页,但如果他只是在同一个域中移动,他可以考虑使用 ajax 请求来更好地控制数据的加载。因此,无需使用窗口位置更改,只需使用 ajax 加载数据,然后附加内容。可能会比加载两个完整页面更轻松。
  • 使用 var wnd = window.open(url); $(wnd).load(function() { $(this).append(compiledTemplate); });仍将模板附加在同一页面上,而不是在打开的新窗口中
猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2016-01-07
  • 2013-05-01
  • 2019-06-16
  • 2015-03-03
相关资源
最近更新 更多