通过超链接打开的窗口,再次点击时,如何控制不再打开一个新窗口

时间:2021-10-07 10:42:41
rt,现在想实现一个功能,如果通过超链接,已经打开一个新窗口并且没有关闭,然后,再次点击超链接时,不允许再次打开一个新窗口,这个如何实现,谢谢!!!

22 个解决方案

#1


可以定义一个变量,在链接前判断一下。变化后禁止链接

#2


你把打开的窗体做为一个焦点,然后这个焦点就在这个窗体上,那么你的鼠标就点不了别的地方了!

#3


<a target="abc" href="abc.html">abc</a>


如上只要target指定了.
就只会向target打开改链接.

#4


 
引用楼主 toss2000 的帖子:
rt,现在想实现一个功能,如果通过超链接,已经打开一个新窗口并且没有关闭,然后,再次点击超链接时,不允许再次打开一个新窗口,这个如何实现,谢谢!!!

在父页面中
<a href=mypage.htm target=_sameWin onclick="return chkwin()">open mypage</a>
再定义一变量 var mypage_win 和一函数 chkwin:
<script language=javascript>
var mypage_win=null;
function chkwin()
{
    if (mypage_win==null) return true;
    mypage_win.focus();
    return false;
}
</script>

在你要打开的页面 mypage.htm 中
mypage.htm
<script language=javascript>
  window.opener.mypage_win = window;
  document.write(new Date());
</script>

#5


好的我先试试

#6


用window.opener是可以实现的,

#7


gengzhw ,由于我是在修改一个已有的项目,它原来的超链接形式如下,一共有如下四个超级链接,

<a href="javascript:openWindow('targetJsp.jsp?params1', 'flag');" style="text-decoration: none;">准备1</a>
<a href="javascript:openWindow('targetJsp.jsp?params2', 'flag');" style="text-decoration: none;">准备2</a>
<a href="javascript:openWindow('targetJsp.jsp?params3', 'flag');" style="text-decoration: none;">准备3</a>
<a href="javascript:openWindow('targetJsp.jsp?params4', 'flag');" style="text-decoration: none;">准备4</a>

使用你的方法我一开始把openMyprepare去掉,直接写
<a href="targetJsp.jsp?params1" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备1</a>
<a href="targetJsp.jsp?params2" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备2</a>
<a href="targetJsp.jsp?params3" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备3</a>
<a href="targetJsp.jsp?params4" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备4</a>

虽然实现了,选择一个超级链接后,只有一个窗口打开,但是,原本的目的是点击四个链接,应该打开四个窗口,现在是,不管点击哪一个链接只能打开一个窗口了,不知道有没有更合适的方式,谢谢~

#8


将你那4链接用下面4个函数打开就OK了

var popUpWin1=0;
var popUpWin2=0;
var popUpWin3=0;
var popUpWin4=0;

function popUpWindow1(URLStr)
{
  if(popUpWin1)
  {
    if(!popUpWin1.closed) popUpWin1.close();
  }
  popUpWin1 = open(URLStr);
}
function popUpWindow2(URLStr)
{
  if(popUpWin2)
  {
    if(!popUpWin2.closed) popUpWin2.close();
  }
  popUpWin2 = open(URLStr);
}
function popUpWindow3(URLStr)
{
  if(popUpWin3)
  {
    if(!popUpWin3.closed) popUpWin3.close();
  }
  popUpWin3 = open(URLStr);
}
function popUpWindow4(URLStr)
{
  if(popUpWin4)
  {
    if(!popUpWin4.closed) popUpWin4.close();
  }
  popUpWin4 = open(URLStr);
}

#9


如果已经打开窗口,则聚焦
否则打开

<a href="javascript:openWindow('http://www.163.com')">163</a>
<script>
var newWindow = null;
function openWindow(url){
if(newWindow == null){
newWindow = open(url, "_blank", "");
}else{
try{
newWindow.focus();
}catch(e){
newWindow = null;
openWindow(url);
}
}
}
</script>

#10


9楼的代码在 FF 下无效,修改了一下:

<a href="javascript:openWindow('http://www.163.com')">163</a>
<script>
var newWindow = null;
function openWindow(url){
if(document.all){// ie
if(newWindow == null){
newWindow = open(url, "_blank", "");
}else{
try{
newWindow.focus();
}catch(e){
newWindow = null;
openWindow(url);
}
}
}else{// ff
if(newWindow == null){
newWindow = open(url, "_blank", "");
}else{
newWindow.close();
newWindow = open(url, "_blank", "");
}
}
}
</script>

#11


sd5816690,谢谢你的帮助,但是还是不符合我的要求,其实我上面写的
<a href="javascript:openWindow('targetJsp.jsp?params1', 'flag');" style="text-decoration: none;">准备1 </a> 
<a href="javascript:openWindow('targetJsp.jsp?params2', 'flag');" style="text-decoration: none;">准备2 </a> 
<a href="javascript:openWindow('targetJsp.jsp?params3', 'flag');" style="text-decoration: none;">准备3 </a> 
<a href="javascript:openWindow('targetJsp.jsp?params4', 'flag');" style="text-decoration: none;">准备4 </a> 

这些个链接是动态产生的,就是说有几个链接是不确定的,而且现在的方法实现是,打开一个链接就会出现一个窗口,比如上面有四个链接,那么就会弹出4个窗口。使用了你的代码后,还是只能产生一个窗口,既点击一个链接后,会弹出一个窗口,但是点击其他链接后,都是在刚才弹出得窗口中显示内容,这个不行~
我在想是不是newWindow 要做成数组形式还是怎么地?

#12


或者有没有办法,首先通过链接打开窗口一,然后再次选择同一链接时,又打开一个窗口一,但是前一个已经打开的窗口自动关闭?不知道好实现不~,新开帖问问

#13


设个target不就好了...

#14


主页面:
<html>
<head>
<script>
var w=[];
function showWin(url)
{
var curW=null;
for(var i=0;i<w.length;i++)
{
if(w[i]!=-1&&w[i].location.href.indexOf(url)!=-1)
{
curW=w[i];
break;
}
}
if(curW!=null)
{
curW.focus();
curW=null;
}
else
{
w.push(window.open(url));
}
}
</script>
</head>
<body>
<a href="#" onclick="showWin('test.html');">test</a>
<a href="#" onclick="showWin('word.html');">word</a>
<a  href="#" onclick="showWin('testSimple2.html');">testSimple2</a>
</body>
</html>

弹出窗口页面:
window.onunload=function()
{
var w1=window.opener.w;
for(var i=0;i<w1.length;i++)
{
if(w1[i]==window)
{
window.opener.w[i]=-1;
break;
}
}
}

PS:给w数组置-1是因为我不知道怎么把数组中某个值的元素删除,其实这里应该是删除该window对象。楼主自己改下吧。

#15


natineprince, 因为所有的链接都指向一个url,只是后面的参数不同,如果设置了target,所有的链接都会在一个页面打开的

#16


<a href="#" onclick="showWin('test.html');" target="a">test </a> 
<a href="#" onclick="showWin('word.html');" target="b">word </a> 
<a  href="#" onclick="showWin('testSimple2.html');" target="c">testSimple2 </a> 

你是要点同一个链接不多开窗口么?上面这个应该是...还是有更加多的要求?

#17


你再怎样动态,url变量的值你最终可以确定吧,
<a href="javascript:openWindow1('<? echo $url1; ?>')">你要显示的东西1</a>
<a href="javascript:openWindow2('<? echo $url2; ?>')">你要显示的东西2</a>
<a href="javascript:openWindow3('<? echo $url3; ?>')">你要显示的东西3</a>
<a href="javascript:openWindow4('<? echo $url4; ?>')">你要显示的东西4</a>
这样不就行了吗

#18


lzz0098,要是动态链接有100个,怎么办?

#19


100个就来个
for(var i=0;i<document.getElementsByTagName("a").length;i++){
document.getElementsByTagName("a")[i].target="a"+i;
}

#20


natineprince,谢谢你的帮助,你的方法我试了,不知道你那里是什么情况,我这里,点击一个链接几次,就开几个窗口,这不是我想要的~,我要的是一个链接点击几次,只能显示第一次点击打开的窗口~

#21


无语了。。。。。。

引用 18 楼 toss2000 的回复:
lzz0098,要是动态链接有100个,怎么办?

#22


<body style="background-color: #00FFCC;"> 
<a href="#" onclick="showWin('test.html');">test </a> <BR/>
<a href="#" onclick="showWin('word.html');">word </a> <BR/>
<a  href="#" onclick="showWin('testSimple2.html');">testSimple2 </a> 
</body> 
<script>
for(var i=0;i <document.getElementsByTagName("a").length;i++){ 
document.getElementsByTagName("a")[i].target="a"+i; 
}
</script>

效果是点test就只有test那窗口.
点word会新开一个.再点word也是那个.

#1


可以定义一个变量,在链接前判断一下。变化后禁止链接

#2


你把打开的窗体做为一个焦点,然后这个焦点就在这个窗体上,那么你的鼠标就点不了别的地方了!

#3


<a target="abc" href="abc.html">abc</a>


如上只要target指定了.
就只会向target打开改链接.

#4


 
引用楼主 toss2000 的帖子:
rt,现在想实现一个功能,如果通过超链接,已经打开一个新窗口并且没有关闭,然后,再次点击超链接时,不允许再次打开一个新窗口,这个如何实现,谢谢!!!

在父页面中
<a href=mypage.htm target=_sameWin onclick="return chkwin()">open mypage</a>
再定义一变量 var mypage_win 和一函数 chkwin:
<script language=javascript>
var mypage_win=null;
function chkwin()
{
    if (mypage_win==null) return true;
    mypage_win.focus();
    return false;
}
</script>

在你要打开的页面 mypage.htm 中
mypage.htm
<script language=javascript>
  window.opener.mypage_win = window;
  document.write(new Date());
</script>

#5


好的我先试试

#6


用window.opener是可以实现的,

#7


gengzhw ,由于我是在修改一个已有的项目,它原来的超链接形式如下,一共有如下四个超级链接,

<a href="javascript:openWindow('targetJsp.jsp?params1', 'flag');" style="text-decoration: none;">准备1</a>
<a href="javascript:openWindow('targetJsp.jsp?params2', 'flag');" style="text-decoration: none;">准备2</a>
<a href="javascript:openWindow('targetJsp.jsp?params3', 'flag');" style="text-decoration: none;">准备3</a>
<a href="javascript:openWindow('targetJsp.jsp?params4', 'flag');" style="text-decoration: none;">准备4</a>

使用你的方法我一开始把openMyprepare去掉,直接写
<a href="targetJsp.jsp?params1" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备1</a>
<a href="targetJsp.jsp?params2" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备2</a>
<a href="targetJsp.jsp?params3" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备3</a>
<a href="targetJsp.jsp?params4" style="text-decoration: none;" target="target1" onclick="return chkwin()">准备4</a>

虽然实现了,选择一个超级链接后,只有一个窗口打开,但是,原本的目的是点击四个链接,应该打开四个窗口,现在是,不管点击哪一个链接只能打开一个窗口了,不知道有没有更合适的方式,谢谢~

#8


将你那4链接用下面4个函数打开就OK了

var popUpWin1=0;
var popUpWin2=0;
var popUpWin3=0;
var popUpWin4=0;

function popUpWindow1(URLStr)
{
  if(popUpWin1)
  {
    if(!popUpWin1.closed) popUpWin1.close();
  }
  popUpWin1 = open(URLStr);
}
function popUpWindow2(URLStr)
{
  if(popUpWin2)
  {
    if(!popUpWin2.closed) popUpWin2.close();
  }
  popUpWin2 = open(URLStr);
}
function popUpWindow3(URLStr)
{
  if(popUpWin3)
  {
    if(!popUpWin3.closed) popUpWin3.close();
  }
  popUpWin3 = open(URLStr);
}
function popUpWindow4(URLStr)
{
  if(popUpWin4)
  {
    if(!popUpWin4.closed) popUpWin4.close();
  }
  popUpWin4 = open(URLStr);
}

#9


如果已经打开窗口,则聚焦
否则打开

<a href="javascript:openWindow('http://www.163.com')">163</a>
<script>
var newWindow = null;
function openWindow(url){
if(newWindow == null){
newWindow = open(url, "_blank", "");
}else{
try{
newWindow.focus();
}catch(e){
newWindow = null;
openWindow(url);
}
}
}
</script>

#10


9楼的代码在 FF 下无效,修改了一下:

<a href="javascript:openWindow('http://www.163.com')">163</a>
<script>
var newWindow = null;
function openWindow(url){
if(document.all){// ie
if(newWindow == null){
newWindow = open(url, "_blank", "");
}else{
try{
newWindow.focus();
}catch(e){
newWindow = null;
openWindow(url);
}
}
}else{// ff
if(newWindow == null){
newWindow = open(url, "_blank", "");
}else{
newWindow.close();
newWindow = open(url, "_blank", "");
}
}
}
</script>

#11


sd5816690,谢谢你的帮助,但是还是不符合我的要求,其实我上面写的
<a href="javascript:openWindow('targetJsp.jsp?params1', 'flag');" style="text-decoration: none;">准备1 </a> 
<a href="javascript:openWindow('targetJsp.jsp?params2', 'flag');" style="text-decoration: none;">准备2 </a> 
<a href="javascript:openWindow('targetJsp.jsp?params3', 'flag');" style="text-decoration: none;">准备3 </a> 
<a href="javascript:openWindow('targetJsp.jsp?params4', 'flag');" style="text-decoration: none;">准备4 </a> 

这些个链接是动态产生的,就是说有几个链接是不确定的,而且现在的方法实现是,打开一个链接就会出现一个窗口,比如上面有四个链接,那么就会弹出4个窗口。使用了你的代码后,还是只能产生一个窗口,既点击一个链接后,会弹出一个窗口,但是点击其他链接后,都是在刚才弹出得窗口中显示内容,这个不行~
我在想是不是newWindow 要做成数组形式还是怎么地?

#12


或者有没有办法,首先通过链接打开窗口一,然后再次选择同一链接时,又打开一个窗口一,但是前一个已经打开的窗口自动关闭?不知道好实现不~,新开帖问问

#13


设个target不就好了...

#14


主页面:
<html>
<head>
<script>
var w=[];
function showWin(url)
{
var curW=null;
for(var i=0;i<w.length;i++)
{
if(w[i]!=-1&&w[i].location.href.indexOf(url)!=-1)
{
curW=w[i];
break;
}
}
if(curW!=null)
{
curW.focus();
curW=null;
}
else
{
w.push(window.open(url));
}
}
</script>
</head>
<body>
<a href="#" onclick="showWin('test.html');">test</a>
<a href="#" onclick="showWin('word.html');">word</a>
<a  href="#" onclick="showWin('testSimple2.html');">testSimple2</a>
</body>
</html>

弹出窗口页面:
window.onunload=function()
{
var w1=window.opener.w;
for(var i=0;i<w1.length;i++)
{
if(w1[i]==window)
{
window.opener.w[i]=-1;
break;
}
}
}

PS:给w数组置-1是因为我不知道怎么把数组中某个值的元素删除,其实这里应该是删除该window对象。楼主自己改下吧。

#15


natineprince, 因为所有的链接都指向一个url,只是后面的参数不同,如果设置了target,所有的链接都会在一个页面打开的

#16


<a href="#" onclick="showWin('test.html');" target="a">test </a> 
<a href="#" onclick="showWin('word.html');" target="b">word </a> 
<a  href="#" onclick="showWin('testSimple2.html');" target="c">testSimple2 </a> 

你是要点同一个链接不多开窗口么?上面这个应该是...还是有更加多的要求?

#17


你再怎样动态,url变量的值你最终可以确定吧,
<a href="javascript:openWindow1('<? echo $url1; ?>')">你要显示的东西1</a>
<a href="javascript:openWindow2('<? echo $url2; ?>')">你要显示的东西2</a>
<a href="javascript:openWindow3('<? echo $url3; ?>')">你要显示的东西3</a>
<a href="javascript:openWindow4('<? echo $url4; ?>')">你要显示的东西4</a>
这样不就行了吗

#18


lzz0098,要是动态链接有100个,怎么办?

#19


100个就来个
for(var i=0;i<document.getElementsByTagName("a").length;i++){
document.getElementsByTagName("a")[i].target="a"+i;
}

#20


natineprince,谢谢你的帮助,你的方法我试了,不知道你那里是什么情况,我这里,点击一个链接几次,就开几个窗口,这不是我想要的~,我要的是一个链接点击几次,只能显示第一次点击打开的窗口~

#21


无语了。。。。。。

引用 18 楼 toss2000 的回复:
lzz0098,要是动态链接有100个,怎么办?

#22


<body style="background-color: #00FFCC;"> 
<a href="#" onclick="showWin('test.html');">test </a> <BR/>
<a href="#" onclick="showWin('word.html');">word </a> <BR/>
<a  href="#" onclick="showWin('testSimple2.html');">testSimple2 </a> 
</body> 
<script>
for(var i=0;i <document.getElementsByTagName("a").length;i++){ 
document.getElementsByTagName("a")[i].target="a"+i; 
}
</script>

效果是点test就只有test那窗口.
点word会新开一个.再点word也是那个.