2011-03-01 148 views
2

我正在制作一个电子商务网站的表格供用户请求关于一个项目的PDF。 表单工作正常,并将用户发送到“谢谢”页面。 在感谢页面上,我有jQuery设置间隔5秒后关闭窗口。 但它不起作用,也不会将关闭命令嵌入到链接中。 但是,如果在“新建”选项卡中打开“谢谢”页面,则时间间隔将起作用。jQuery没有关闭窗口

这里是php文件中的代码(在成功提交表单后调用)。

/* Results rendered as HTML */ 

    $theResults = <<<EOD 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Thanks</title> 
<script type="text/javascript" src="css/00000001/jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() 
{ 
    //wait a few seconds and close the window 
    setInterval(function() 
    { 
     window.close(); 
    }, 5000); 
}); 

</script> 
<style type="text/css"> 
body{ 
    background-color: transparent; 
    margin: auto auto auto auto; 
    border: none; 
} 

#general-copy{ 
    background-color: transparent; 
    margin: -5px auto auto 0px; 
    position: absolute; 
    width: 300px; 
    height: 350px; 
    padding: 0px 15px 15px 15px; 
    font-family: Georgia, "Times New Roman", Times, serif; 
    font-size: 14px; 
    font-style: normal; 
    font-variant:normal; 
    font-weight:100; 
    text-align: justify; 
    z-index: 3; 
} 

</style> 
</head> 
<body><br /><br /> 
<div class="lettertext"> 
Thank you for your request.<br /> 
We will email you a pdf all about $item2Field. 
<br><br> 
<p style="font-size: 10px;">This window should close itself in 5 seconds.<br> 
If it doesn't please click <a href="javascript:window.close()">here</a> to return to the site. 
</p> 
</div> 
</body> 
</html> 
EOD; 
echo "$theResults"; 


?> 

如果你想查看运行生活,你可以尝试一下here

+1

真的,你应该避免需要新的窗口并关闭它们,它经常被阻止。如果您需要弹出窗口,请创建一个叠加层。 – Orbling 2011-03-01 01:29:54

+1

@Orbling说的很多,你的场景看起来更像是一个糟糕的jQuery使用。 – yoda 2011-03-01 01:33:43

+1

我可能会稍后将它作为叠加层进行转换,但现在弹出窗口就是我正在寻找的东西。 – mattelliottIT 2011-03-02 16:32:47

回答

7

window.close @ MDN(Mozilla的文档)

这种方法只允许是 称为用于通过 被打开使用window.open方法的脚本,该脚本的窗户。 如果未通过 脚本打开该窗口,则在JavaScript控制台中 中会出现以下错误:脚本可能不会通过脚本关闭未打开 的窗口。

W3C norm on HTML5同意:

上窗口close()方法对象 应,如果相应的浏览 上下文中的是一个由一个脚本 创建辅助浏览 上下文(相通过 用户的动作),并且如果浏览上下文 ,则调用该方法的脚本是 被允许导航浏览 上下文A,关闭浏览上下文 A(也可能丢弃它)。

+0

啊哈!所以,因为这是一个弹出式窗体反正我需要触发窗口在JavaScript中打开。 – mattelliottIT 2011-03-02 16:31:12

0

尝试获取对您的窗口的引用。如果你使用window.open(),请试试这个:

var wind = window.open(params);// then close.. 
wind.close(); 
0

我在谷歌浏览器中试过你的代码,并且正在工作。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script> 
$(document).ready(function() 
{ 
    //wait a few seconds and close the window 
    setInterval(function() 
    { 
     window.close(); 
    }, 5000); 
}); 
</script> 

我看过在IE中也有效。但是,也许你正在使用FireFox来测试你的页面,这就是为什么不起作用。很可能您可以通过search for针对FireFox的解决方案。

UPDATE:我测试了另一个solution哪个有效。但是,它需要更高的权限:

$(document).ready(function() 
{ 
function closeWindow() { 
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); 
    alert("This will close the window"); 
    window.open('','_self'); 
    window.close(); 
} 
    //wait a few seconds and close the window 
    setInterval(function() 
    { 
     window.close(); 
     closeWindow(); 
    }, 5000); 
}); 

结果是一条警告消息,询问用户有关权限的级别。可能不是最好的选择。也许,不是关闭一个窗口,而是可以将用户重定向到相关的东西。