【发布时间】:2013-08-14 18:55:38
【问题描述】:
我们的网站具有可以打印会员资料的功能。它的工作方式是通过 onsubmit 将 javascript 函数附加到按钮上。 javascript 函数使用 window.open 在特殊模式下重新打开页面,重新显示页面的打印机友好版本。
此功能自 2008 年左右开始使用,适用于所有浏览器。除了大约一周前,它已停止在 Chrome 中工作。在 Chrome 中,打开的窗口确实打开了,但随后又短暂打开了另一个空白窗口,然后所有窗口都关闭了。
在搜索有关此问题的讨论时,我无法找到确切的问题,但确实找到了一些说“返回 false”应该添加到 onsubmit 的内容。我尝试添加它,但没有帮助。
这是 onsubmit 的样子:
<button onclick="PrintEmailSubmit('print');">Print Profile</button>
以下是打开窗口的代码:
window.open('print-email-profile.php?mode=' + mode,'','width=' + width + ',height=' + height + ',scrollbars=yes,location=0,menubar=1,status=0,toolbar=0')
虽然没必要看,这里是整个函数 PrintEmailSubmit():
/*
* called by view-profile.php
*/
function PrintEmailSubmit(mode)
{
var width;
var height;
switch(mode)
{
case 'print':
width = 850;
height = 1000;
break;
case 'email':
width = 400;
height = 120;
break;
default:
alert('Error: invalid calling sequence -- should not happen!');
exit;
}
window.open('print-email-profile.php?mode=' + mode,'','width=' + width + ',height=' + height + ',scrollbars=yes,location=0,menubar=1,status=0,toolbar=0');
}
最后,使这项工作有效的原因是特殊版本的页面在 body 标记中添加了以下内容:
<body onload="window.print();window.close();">
如上所述,该功能在 IE 和 Firefox 中继续有效。只是 Chrome 有这个问题。
有什么想法吗?
【问题讨论】:
-
会不会是 Chrome 的弹出窗口阻止程序阻止了它?那么你应该会收到通知,控制台是否显示任何错误?
-
如果不是太长,请附上PrintEmailSubmit的JS
-
没有window.close也能用吗?如果是,则设置关闭窗口的超时时间或改用按钮。
-
Badr Hari:奇怪的是,它在所有浏览器中都可以正常运行 6 年,但现在无法在 Chrome 上运行。实际上,从主体 onload 中取出 window.close 确实允许打印功能在 Chrome 上工作,但它会使打印友好的窗口保持打开状态。因此,这指向了解决方案的方向。我只需要让 window.close 在那里,但不会过早触发
-
Diodeus:我没有展示它,因为它不会太有帮助。但是既然你问了,我会把它添加到原来的问题中。
标签: javascript google-chrome window.open