JavaScript window.open仅当窗口不存在时才打开
我有一个应用程序,点击一个链接就会打开一个新窗口。这将生成一个包含Java小程序的页面。我遇到的问题是,单击相同的链接会重新加载页面,这会重置Java应用程序。有什么办法可以解决这个问题吗?可以接受的两种解决方案是:JavaScript window.open仅当窗口不存在时才打开,javascript,popup,window,Javascript,Popup,Window,我有一个应用程序,点击一个链接就会打开一个新窗口。这将生成一个包含Java小程序的页面。我遇到的问题是,单击相同的链接会重新加载页面,这会重置Java应用程序。有什么办法可以解决这个问题吗?可以接受的两种解决方案是: 允许从单击处理程序打开多个窗口 如果窗口已打开,则忽略后续请求 我为自己是Javascript新手而道歉——这并不是我的主要职责 附加到处理程序的代码是 function launchApplication(l_url, l_windowName) { var l_width
function launchApplication(l_url, l_windowName)
{
var l_width = screen.availWidth;
var l_height = screen.availHeight;
var l_params = 'status=1' +
',resizable=1' +
',scrollbars=1' +
',width=' + l_width +
',height=' + l_height +
',left=0' +
',top=0';
winRef = window.open(l_url, l_windowName, l_params);
winRef.moveTo(0,0);
winRef.resizeTo(l_width, l_height);
}
编辑:
感谢回复-我稍微修改了建议,这样我就可以通过该功能打开多个URL
编辑2:
此代码的另一个版本位于
您可以在打开新窗口的页面中使用如下内容:
var newWindow = null;
function launchApplication()
{
// open the new window only if newWindow is null (not opened yet)
// or if it was closed
if ((newWindow == null) || (newWindow.closed))
newWindow = window.open(...);
}
您可以这样检查:
if(!winref || winref.closed)
{
}
我会这样做-基本上将所有被引用的打开的窗口存储在函数本身上。当函数启动时,检查窗口是否不存在或已关闭-因此,启动弹出窗口。否则,请关注该请求的现有弹出窗口
function launchApplication(l_url, l_windowName)
{
if ( typeof launchApplication.winRefs == 'undefined' )
{
launchApplication.winRefs = {};
}
if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed )
{
var l_width = screen.availWidth;
var l_height = screen.availHeight;
var l_params = 'status=1' +
',resizable=1' +
',scrollbars=1' +
',width=' + l_width +
',height=' + l_height +
',left=0' +
',top=0';
launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params);
launchApplication.winRefs[l_windowName].moveTo(0,0);
launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height);
} else {
launchApplication.winRefs[l_windowName].focus()
}
}
您需要执行2个测试。。。1检查弹出窗口是否已定义,2检查是否已关闭
if(typeof(winRef) == 'undefined' || winRef.closed){
//create new
winRef = window.open(....);
} else {
//it exists, load new content (if necs.)
winRef.location.href = 'your new url';
//give it focus (in case it got burried)
winRef.focus();
}
尝试检查:
如果(!winref | | winref.closed | |!winref.document){
}工作代码
var newwindow = null;
function popitup(url) {
if ((newwindow == null) || (newwindow.closed)) {
newwindow=window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes');
newwindow.focus();
} else {
newwindow.location.href = url;
newwindow.focus();
}
}
是的,我就是这样做的——占用更少的空间,更多的重用,独立的+1+1非常好。但是有一件事,您在原始检查中有
winRefs
,但后来您将其拼错为winRefs
,或者简单地说:如果(!newWindow | | newWindow.closed),则如果窗口已经打开,则不会聚焦窗口,也不会加载新窗口URL@annakata--我认为不存在空指针问题,因为如果!winref
为true,则永远不应检查IOR的第二部分--winref.closed
。你觉得这样对吗?还是我完全错了?交叉浏览是一个很好的解决方案,但它会重新加载窗口,即使URL是same@user2826057根据代码中我的注释中的注释-如果您不想重新加载相同URL的内容,您可以测试if(winRef.location.href!=myNewURL){…}
仅在不同的情况下重新加载。
var newwindow = null;
function popitup(url) {
if ((newwindow == null) || (newwindow.closed)) {
newwindow=window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes');
newwindow.focus();
} else {
newwindow.location.href = url;
newwindow.focus();
}
}