我目前正在使用 javascript 并尝试通过 cookie 将 sessionGUID 传递到使用 IE9 新打开的窗口。我希望避免将 sessionGUID 放在查询字符串上。
我正在使用以下代码打开新窗口并将 cookie 分配给新窗口:
var pathname = /msgViewer.htm?A=" + aGUID + "&Detached=yes";
var myWindow = window.open(pathname, "detached_window");
myWindow.document.cookie = "SG=" + sGUID;
但是,当 (document).ready 在新窗口中执行时,cookie 似乎没有设置。
$(document).ready(function () {
...
sGUID = getCookie("SG");
...
[call to AJAX webservice that requires sGUID be passed]
...
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
}
else {
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
}
return unescape(dc.substring(begin + prefix.length, end));
}
当我在 getCookie 调用后设置(测试)警报时,sGUID 未定义,但是警报引起的延迟(用户输入)允许在此之后读取 cookie。
如何确保在 $(document).ready 执行之前在新窗口中设置 cookie?...或者至少确保在从 cookie 中检索 sessionGUID 之前不调用 web 服务?
该问题在 FireFox 或 Chrome 中不存在——仅在 IE 中。
提前感谢您的考虑...
更新 (20121115):此链接http://ellislab.com/forums/viewthread/220241/表明 cookie 数据在发出页面请求之前可能不可用。上述情况通常只发生在初始登录期间或删除 cookie 之后(并且仍然断断续续)我当前的解决方案/解决方法是打开和关闭临时窗口并重新检索 cookie。由于无论如何都会在打开新窗口时发生此问题,因此额外的窗口闪烁并不明显。我还将 cookie 的检索移到了 $(document).ready 函数之外。这是附加代码:
sGUID = getCookie("SG");
if (sGUID == null) {
var jwURL = "/Test.htm";
jw = window.open(jwURL, "junk_window",width=1,height=1);
jw.close();
sGUID = getCookie("SG");
}