Я печатаю страницу, содержащую карту Google Maps API v3 из iframe. Я реализовал следующий код, чтобы убедиться, что страница полностью загрузилась перед печатью iframe.
/**
* Auto print the page once the full document has finished loading
*/
function checkDocumentStateChange(documentElement) {
var document = documentElement;
console.log('Document ReadyState: ' + document.readyState);
document.onreadystatechange = function () {
console.log('Document ReadyState: ' + document.readyState);
if (document.readyState === 'complete') {
console.log("Document fully loaded!");
console.log("Printing report from within iframe");
setTimeout(function () {
window.print();
var requestOrigin = '@viewModel.RequestOrigin';
if(!!requestOrigin) {
// Tell the parent window that the print has occurred, so it can prepare to cleanup and remove this iframe
console.log("Send postMessage: secret");
parent.postMessage('secret', requestOrigin);
}
}, 500);
}
}
}
Однако даже с задержкой в 500 миллисекунд AFTER document.readystate === 'complete'
верно, часто страница печатается с серым / пустым холстом Google Maps без изображений.
Если я снова нажму window.print (), не перезагружая страницу, он распечатает iframe со всеми изображениями карты, как и ожидалось. Значит, состояние готовности документа лжет.
Что я могу сделать, чтобы решить эту проблему, кроме увеличения задержки еще больше (чего я не хочу делать, так как это наказывает людей долго ждать, когда контент загружается быстро)
.postmessage
для связи в домене. Чем может помочь заголовок cors в этой ситуации? - person TetraDev   schedule 24.05.2017google.maps.event.addListener(map, 'idle', function () { //set flag to check for here });
- person TetraDev   schedule 24.05.2017