【问题标题】:Javascript window.open returns undefinedJavascript window.open 返回未定义
【发布时间】:2014-07-28 18:39:02
【问题描述】:

我有一个 Rails 3.2 站点,并且正在使用突然停止工作的 javascript 打印例程。这是我的打印例程代码:

function print() {
    var mywin = window.open('', '', '');
    mywin.document.write('<body><link href="/assets/application.css" media="all"    rel="stylesheet" type="text/css" />' + document.getElementsByClassName('fields')[0].innerHTML + '</body>');
    mywin.print();
    mywin.close();
    return false;
}

代码几个月来一直运行良好,但现在每当您尝试打印时,它只会打印两个空白页。它在第二行抛出错误,无法读取未定义的属性“文档”,检查显示 mywin 未定义。

谷歌搜索没有产生任何有价值的结果,所以有人知道为什么会发生这种情况吗?

【问题讨论】:

  • 这段代码是从哪里调用的?点击事件?还是以编程方式?这是在什么浏览器中发生的?
  • 来自点击事件:打印。使用 Chrome。
  • 你找到解决办法了吗?

标签: javascript ruby-on-rails printing ruby-on-rails-3.2


【解决方案1】:

如果浏览器设置阻止创建新窗口,window.open 函数将返回 undefined。您唯一的选择是检查真实值,否则会显示浏览器设置阻止打开窗口的消息。

var win = window.open(...);

if (win) {
    win.document.write(...);
} else {
    alert("Your browser prevented the window from opening.");
}

【讨论】:

  • 它并没有被阻止。确实会打开一个新选项卡并触发打印,只是内容为空白,因为它无法访问要写入的新窗口的文档。
  • 也许使用“#”作为新窗口的 url?有时浏览器可以将相对 url "" 解释为 "当前页面"
【解决方案2】:

我在非 Rails 环境中遇到了同样的问题。我正在使用节点的 http-server,在 localhost 上工作。

问题在于 Chrome 会自动阻止来自 localhost 的弹出窗口。我去了设置并添加了“localhost”作为例外,现在一切正常!

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多