2009-06-13 108 views
4

我有问题,打开弹出窗口在JavaScript我有这样的功能在IE6和IE7打开我的弹出窗口:JavaScript弹出问题在Internet Explorer中!

function open_window(Location,w,h) //opens new window 
{ 
    var win = "width="+w+",height="+h+",menubar=no,location=no,resizable,scrollbars,top=500,left=500"; 
    alert(win) ; 
    window.open(Location,'newWin',win).focus(); 

} 

它的工作。我的意思是我的新窗口打开,但发生错误。错误消息是:

'window.open(...)'为空不是一个对象。
你想countinue在这个页面上运行脚本?

然后我在onclick事件按钮,它会调用一个函数来关闭当前窗口的刷新开瓶器功能

function refreshParent(location) 
{ 
    window.opener.location.href = location ; 
    window.close(); 
} 

这也使我的错误:window.opener.location为空或不一个对象,但我敢肯定,我传递正确的参数

我这样称呼它:

的第二部分:

<input type="button" name="pay" value="test" onclick="refreshParent('index.php?module=payment&task=default')" > 

的第一部分:

<a onclick="javascript:open_window('?module=cart&task=add&id=<?=$res[xproductid]?>&popup=on','500' , '500')" style="cursor:pointer" id="addtocard"> <img src="../images/new_theme/buy_book.gif" width="123" border="0"/> </a> 

它真的让我困惑。请帮忙;)

+0

听起来像一个弹出窗口阻止问题。 – Cerebrus 2009-06-13 09:08:32

+0

但是它仍然给我错误请检查这个网站 www.pouran.net 不幸的是这个网站在波斯语,我不认为你是舒适的。所以如果你可以继续尝试添加一些东西到你的篮子里,那么你会看到错误信息。坦克。 – mehdi 2009-06-13 11:55:51

+0

嗯,我不明白一个单词,但我想我设法找到有问题的页面。我也蠢蠢欲动地打开弹出窗口,并从里面的按钮关闭 - 之后,页面刷新自己。我没有注意到任何错误。一切似乎都很好。也许这是你电脑里的东西?你有没有在别人尝试过吗? – 2009-06-13 15:26:45

回答

6

当使用window.open打开弹出窗口的弹出窗口拦截器,这几天的特征几乎所有的现代浏览器的window.open的返回值()封锁是不是一个窗口对象,但为空。

为了规避这些问题,您需要在尝试调用window.open()的任何方法之前测试返回的值。

下面是一段代码来演示如何去解决这个问题:

function open_window(Location,w,h) //opens new window 
{ 
    var options = "width=" + w + ",height=" + h; 
    options += ",menubar=no,location=no,resizable,scrollbars,top=500,left=500"; 

    var newwin = window.open(Location,'newWin',options); 

    if (newwin == null) 
    { 
    // The popup got blocked, notify the user 
    return false; 
    } 

    newwin.focus(); 
} 

在一般情况下,弹出窗口应只作为最后的手段或在受控环境(公司内部网站等) 。弹出窗口阻止程序往往表现得非常不一致,并且在给定的浏览器中安装的弹出窗口阻止程序可能不止一个,因此指导用户如何允许给定网站的弹出窗口不一定是解决方案。例如:IE7 + Google工具栏=两个弹出窗口拦截器。

如果我可以建议,也许你应该考虑使用这样的事情: http://jqueryui.com/demos/dialog/

的优点很多:

  1. 换肤,让您可以创建一个更加一致的外观,以符合您的网站。
  2. 没有弹出式窗口拦截器。
  3. 良好的API和文档在大多数(如果不是全部的话)主流浏览器中都是一致的。

如果您仍然要求新打开的“窗口”包含外部URL,则可以在打开的对话框窗口中使用IFRAME。

希望这会有所帮助,

Lior。

0

对我来说工作得很好。在IE6/7/8中测试。

当然,我无法用您的网址进行测试,所以我用简单的文件名替换了这些文件。我建议你用简单的文件名尝试一下,看看它是否也失败了。

那旁边......

你并不需要添加“的javascript:”在onclick属性值的开头。

如果您向带有与open_window相同的URL的链接添加了href =“...”属性,那也不错。然后它将成为一个真正的链接,你不必添加游标:指向它的指针。例如:

<a href="?module=cart&task=add&id=<?=$res[xproductid]?>&popup=on" 
    onclick="open_window(this.href, '500' , '500'); return false;"> ... 
0

这里是一个办法让你的蛋糕,吃它也 我没有测试它在所有的浏览器,但它应该工作

function open_window(url,target,w,h) { //opens new window 
    var parms = "width="+w+",height="+h+",menubar=no,location=no,resizable,scrollbars,top=500,left=500"; 
    var win = window.open(url,target,parms); 
    if (win) { 
    win.focus(); 
    return false; // cancel the onClick 
    } 
    return true; // make the link perform as normal 
} 

使用链接

<a href="?module=cart&task=add&id=<?=$res[xproductid]?>&popup=on" 
target="newWin" 
onclick="return open_window(this.href,this.target,500,500)" 
id="addtocard"><img src="../images/new_theme/buy_book.gif" width="123" border="0"/></a> 

甚至节省你愚蠢的光标的事情,因为它是一个实际的链接,即使当关闭JS的工作