我有一个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(...)
。
一个相关的问题和答案:
此代码导致win
为undefined
let win = window.open('https://www.xerox.com', '_blank').focus();
问题是.focus()
函数返回undefined
let win = window.open('https://www.xerox.com', '_blank');
win.focus();