Window.Open Java脚本变量

时间:2014-03-27 17:04:47

标签: javascript html html5

我正在尝试将javascript变量传递给打开的新窗口,但是如果我添加名称“_self”,则不会传递该变量:

这不起作用,约会未定义:

    var w = window.open("../calendar/appointment.html","_self");
w.appointmentId = appt.id;  

这确实有效:

    var w = window.open("../calendar/appointment.html");
    w.appointmentId = appt.id;

如何使用_self名称传递变量,因此不会打开新的选项卡/窗口?

我传递的变量很大。他们将占用URL限制。对不起,我之前没有说明这一点。

由于

5 个答案:

答案 0 :(得分:3)

另一种方法是在查询字符串中传递变量。

重定向:

window.location = "../calendar/appointment.html?appt_id=" + appt.id

页面加载:

<script type="text/javascript">
  // http://stackoverflow.com/a/901144/1253312
  function getParameterByName(name) {
      name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
      var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
      var results = regex.exec(location.search);
      return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
  }
  window.appointmentId = getParameterByName('appt_id');
</script>

答案 1 :(得分:1)

另一种方法是通过window.location。例如:

window.location = "../calendar/appointment.html"; // this will send the user here in the current window

此外,变量通常通过使用QueryString(有时称为GET变量)从页面到页面传递。这些通常出现在问号之后。在您的情况下,您可以传递这样的变量:

window.location = "../calendar/appointment.html?appointmentId=" + appt.id;
// ../calendar/appointment.html?appointmentId=113

您还可以在哈希标记后传递变量:

window.location = "../calendar/appointment.html#" + appt.id;
// ../calendar/appointment.html#113

如果您使用第二个选项,则可以通过location.hash读取变量。如果您通过QueryString传递它,那么您可以从URL中提取变量,如下所示:

How can I get query string values in JavaScript?

答案 2 :(得分:0)

window.open可以带3个参数

https://developer.mozilla.org/en-US/docs/Web/API/Window.open

您传递的第二个参数是创建窗口的名称。 这就是为什么你没有把它放在窗户里面。

window.open(strUrl, strWindowName[, strWindowFeatures])

有关支持功能的信息,请参阅给定的网址。

答案 3 :(得分:0)

您发布的代码不起作用的原因是因为当您使用_self时,旧文档会在加载新文档之前得到清理。因此,没有时间两者可以同时进行通信。

This answer稍微不同的问题,但具有相同的根本原因提供了几种异步通信方法:

  

您可以使用的选项是:

     
      
  • 使用hash标签将其添加为参数(second.php #tmpstr = aaaaaa
  •   
  • 使用cookies(有一个很好的jQuery cookie插件)
  •   
  • 将整个页面移动到iFrame(不推荐)并仅重定向主框架。
  •   

请注意,使用散列标记稍微好于使用其他答案建议的查询字符串,因为您的变量不会最终请求服务器。

答案 4 :(得分:0)

您可以使用浏览器的会话存储空间。

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

重定向前:

sessionStorage.setItem("appointmentId", appt.id);

重定向:

window.location = "../calendar/appointment.html";

当appointment.html加载时:

window.appointmentId = sessionStorage.getItem("appointmentId");