Javascript窗口.Open返回未定义



我有一个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;
}

代码已经运行好几个月了,但是现在当你试图打印时,它只打印两个空白页。它在第二行抛出一个错误,不能读取属性'document'的undefined,检查显示mywin是undefined。

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

我在非rails环境中遇到了同样的问题。我正在使用节点的http-server,在本地主机上工作。

问题是Chrome会自动阻止来自本地主机的弹出窗口。我去设置并添加了"localhost"作为例外,现在一切都很好!

希望能有所帮助

距离我第一次发表答案已经有几年了。带着一双新鲜的眼睛回来总是有帮助的。


因为要打开一个窗口并动态创建HTML文档,所以URL很重要。显然,空白URL会导致window.open(...)返回一个未定义的值,而不是抛出异常。相反,指定about:blank作为URL:

function print() {
    var mywin = window.open('about:blank', '', '');
    //                       ^^^^^^^^^^^
    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;
}

如果这不起作用,考虑在web服务器上放置一个空白的HTML文件并加载该URL。只要它来自同一个域,JavaScript就可以在新窗口中调用document.write(...)

一个相关的问题和答案:

此代码导致winundefined

let win = window.open('https://www.xerox.com', '_blank').focus(); 

问题是.focus()函数返回undefined

工作代码:

let win = window.open('https://www.xerox.com', '_blank');
win.focus(); 

最新更新