我正在尝试在页面加载时打开打印对话框。使用下面的代码,我没有出现任何错误,窗口打开,但onload似乎永远不会打开,打印对话框也没有打开(Firefox和Chrome - 没有测试过其他浏览器)。
我试过这些:
var printWindow = window.open(result.url);
printWindow.window.onload = function () {
printWindow.window.print();
console.log("Printing page");
}
和
var printWindow = window.open(result.url);
printWindow.onload = function () {
printWindow.print();
console.log("Printing page");
}
和
var printWindow = window.open(result.url);
printWindow.addEventListener("load", function() {
printWindow.print();
console.log("Got here");
});
result.url的示例:
我正在试着看看这个post是否适用于我的情况,以及我如何能够将答案用于我的优势。我允许用户生成新网址的原始窗口位于http://ourserver/ourapp,而新网址位于http://ourerver/arcgis/ ... 我不相信这是相同的情况,但我试图看看如果是这种情况,如何利用建议的副本的答案。
更新 所以我终于使用postMessage方法获取了信号。但是,我认为我遇到了window.print()特定的问题,因为print语句出现在控制台上,但我仍然有以下问题:
在Firefox上,打印对话框打开,但它打印出来:空白,而不是我打开窗口的网址...似乎页面在对话框打开之前没有完全加载或者某些东西(当我在没有处理程序的情况下直接调用printWindow.print()时会发生同样的事情。
var printWindow = window.open(result.url);
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
console.log('origin: ', e.origin)
// Check if origin is proper
if( e.origin != 'http://ourserver' ){ return }
console.log('parent received message!: ', e.data);
try {
//attempt to deserialize function and execute as closure
eval('(' + decodeURI(e.data) + ')();');
} catch(e) {}
}, false);
printWindow.opener.postMessage({serializeFunction(openPrintDialog)}, 'http://ourserver');
代码引用了这些函数:
function serializeFunction(f) {
return encodeURI(f.toString());
}
function openPrintDialog() {
printWindow.print();
console.log("Got here");
}