【问题标题】:Javascript's window.open function inconsistent, does not open pop up when expectedJavascript的window.open函数不一致,按预期不打开弹出
【发布时间】:2012-04-10 10:12:44
【问题描述】:

好吧,我要疯了。我正在尝试实现一个基本的弹出窗口来显示图像。如果我的 javascript 代码在带有 onclick 属性的 HTML 标记中完全指定,则窗口会正确弹出。如果从 HTML 文档开头的脚本标记或单独的 js 文件调用我的 IDENTICAL javascript 代码,则链接(或在我的情况下为图像)不是在弹出窗口中打开,而是在同一个窗口中打开。

这会打开一个弹出窗口:

<a href="test.jpg" onclick="window.open('test.jpg','test_name','width=500,height=500,scrollbars=no'); return false">test_name</a>


这不会打开弹出窗口:

function cleanPopup(url, title) {
window.open(url, title, 'width=500,height=500,scrollbars=no');
return false;
}

<a href="test.jpg" onclick="return cleanPopup('test.jpg', 'test_name')">test_name</a>


任何帮助将不胜感激。

PS:在 Chrome 和 Firefox 中测试。

编辑:

我发现了我的问题。我原本只调用了head标签中的js文件。当使用模板工具(在我的例子中为模板工具包)的多个脚本创建 div 的层时,有一些东西使 head 元素中的原始脚本元素对更深的子元素似乎不可见。

我不知道到底发生了什么,也没有时间去探索它。我已经添加了这个编辑,以防其他人有类似的问题并且以某种方式偶然发现这个线程。如果有人理解这种现象,并能解释一下,请做。

编辑 2:

window.open 方法的“name”参数不能包含空格,以便弹出窗口在 IE 中工作。谢谢 M$。

【问题讨论】:

  • 它确实为我打开了一个弹出窗口。检查你浏览器的 JavaScript 控制台,我很确定你在某处有语法错误。
  • 我在标准文档模式下在 IE9、IE7-8(来自 IE9 DevTools)中对此进行了测试。我在最新版本的 FireFox、Chrome、Safari 和 Opera 中对此进行了测试。一切都按预期工作。可能您需要展示更完整的示例。
  • 没有语法错误 - 但是如果有弹出窗口阻止程序,脚本可能会失败,然后只是跟随 url
  • 请记住,这两个示例在同一个浏览器中的工作方式不同。事实上,我将两个示例并排放置,单击一个链接会打开一个弹出窗口,而另一个则会打开一个新选项卡。

标签: javascript window


【解决方案1】:

DEMO HERE

在我看来,这段代码最接近万无一失。

经过测试

  • Windows - Fx、Chrome、IE8 和 Safari
  • iPhone:移动版 Safari
  1. 如果允许,添加目标会使链接在新窗口或选项卡中打开 - 以防脚本因任何原因失败 - 这是一个有用的副作用,但不是问题的答案。
  2. 如果 window.open 失败返回 true 也将使点击跟随链接,希望调用目标 - 请注意,某些浏览器不再对目标做出反应。
  3. 第三个参数中的高度(和宽度)将强制在新窗口而不是新选项卡中打开,除非浏览器设置为在选项卡中打开所有新窗口
<html>
<head>
<script type="text/javascript">
window.onload=function() {
 document.getElementById('popup').onclick=function() {
   var w = window.open(this.href, this.target, 
       'width=500,height=500,scrollbars=no');
    return (!w); // opens in new window/tab if allowed
  }
}
</script>
</head>
<body>

<a id="popup" href="test.jpg" target="test_name">test_name</a>
</body>
</html>

【讨论】:

  • 在我的代码中不起作用。打开一个新选项卡,而不是弹出窗口。惊人的。我正在同一个浏览器窗口中的不同选项卡中尝试您的演示,它可以工作(打开一个弹出窗口)。从浏览器的角度来看源代码,除了我的 href 内容,当然还有一堆其他的 html 之外,一切看起来都一样。我的代码库中是否有一些 html 可以否定打开弹出窗口的努力?我完全感到困惑。
  • 我需要亲自查看和测试您的页面。如果您不想在这里发帖,我的电子邮件在我的个人资料中。
  • @s2cuts 你能把你有问题的实际页面提供给我吗?
【解决方案2】:

使用 target="_blank"

<a href="whatever" target="_blank"> ...

来自 HTML,或

window.open(url, '_blank', options)

来自 javascript

【讨论】:

  • @mplungjan 我认为这是相关的。如果您不指定“_blank”,则可能会覆盖现有窗口(已使用指定名称打开)
  • 这与提问者的问题有点相关。不是因为可能的覆盖,而是因为脚本的任何失败都会使点击跟随链接。因此,您添加目标具有不使链接在同一窗口中打开的副作用。至于您提到的另一个原因 - 如果它曾经是一个问题,那么可以执行 var target="x"+new Date().getTime() 来获得一个随机但可识别的目标。它与 han 的问题没有进一步的关系
【解决方案3】:

使新窗口标题随机

onclick="PopupCenter(this.href,'random','600','700','yes'); return false;"

在功能上:

if(title=='random')
{
title = randomID();
}

【讨论】:

    【解决方案4】:

    试试这个

    function mypopup()
    {
        mywindow = window.open("http://www.test.com", "mywindow", "location=1,status=1,scrollbars=1,  width=100,height=100");
    }
    

    【讨论】:

    • 在许多浏览器上 window.open 的参数中不允许有空格。也可以省略 =1
    【解决方案5】:

    确保您将 javascript 代码放在 Head 块中

    <head>
    <script type="text/javascript" language="JavaScript">
    function cleanPopup(url, title) {
        window.open(url, title, 'width=500,height=500,scrollbars=no');
        return false;
    }
    </script>
    

    在体内:

    <a href="" onclick="cleanPopup('test.jpg','test_name')">test_name</a>
    

    它在 Firefox 和 IE 中都对我有用,没有任何问题

    【讨论】:

    • 您需要将 false 返回给 onclick 处理程序,以便 onclick="return cleanPopup(...)"
    • 是的,您是对的,有必要返回 false 以便不会发生默认事件操作(在这种情况下,跟随 url)。我错过了它,因为糟糕的 FF(也是 chrome)总是试图太聪明,他们不遵循空白网址:-/。感谢您指出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2023-04-11
    相关资源
    最近更新 更多