我有一个应用程序需要根据发送给它的查询字符串弹出URL。不幸的是,我们无法在应用程序本身中插入任何javascript,但我们可以插入一个加载运行javascript的页面的iFrame。应用程序中存在一个错误,它会在几秒钟内将内容加载到iFrame中两次,这会导致URL弹出两次。
为了解决这个问题,我决定设置一个过期的cookie。在弹出之前,我会检查cookie是否存在,如果存在,则阻止弹出。
不幸的是,我的cookie没有被设置。我已经阅读了一些关于Javascript cookie的线程试图解决这个问题。我发现的第一件事是Chrome不接受来自本地文件的cookie,因此我设置了一个IIS服务器来托管该页面。
但是,cookie仍未设置。我读了this page以确保我的代码是正确的,据我所知,它应该是正确的。
我的页面代码如下。任何帮助将不胜感激。
<html>
<head>
<script type="text/javascript">
var isPopped;
function myFunction() {
alert("Hello! I am an alert box!");
}
function checkCookie() {
var user=getCookie("username");
if (user != "") {
alert("Welcome again " + user);
} else {
user = prompt("Please enter your name:","");
if (user != "" && user != null) {
setCookie("username", user, 30);
}
}
}
function pop() {
var queryString = location.search.substring(1); //Get Query String from URL of iFrame source. The substring(1) strips off the ? and only takes the first substring. This can be modified to take more and the resulting string can be edited with Regular Expressions if more flexibility is required.
var urlToPop = "https://www.google.com/#" + queryString //Set URL to pop.
var recentVisitTrue=getCookie("visitRecent");
if (recentVisitTrue != "") {
isPopped = 1;
} else {
window.open(urlToPop,"_blank");
setCookie("visitRecent", "true");
}
}
function setCookie(cName,cValue) {
var date = new Date();
date.setTime(d.getTime() + 8000000);
var expires = "; expires=" + date.toGMTString();
document.cookie = cName + "=" + cValue + expires + ";path=/";
}
function getCookie(cName) {
var name = cName + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
</script>
</head>
<body onload="pop();">
v0.32
</body>
</html>
谢谢!