我正在尝试将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限制。对不起,我之前没有说明这一点。
由于
答案 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中提取变量,如下所示:
答案 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");