Выполнение функции до того, как страница попадет в window.print()
У меня есть страница, которая вызывает window.print(); внизу страницы. У меня нет возможности получить доступ к коду вокруг window.print(); Он генерируется сервером, и я не могу его коснуться. В основном из-за IE мне нужно выполнить немного javascript до того, как появится диалоговое окно печати, но после загрузки страницы. Я не могу этого сделать, потому что как только он попадет в window.print(); появится диалоговое окно печати. Мне все еще нужно печатать, но сначала мне нужно запустить myFunction(), затем я могу window.print();
<html><head></head><body></body><!--no access from here--><script>window.print();</script></html>
5 ответов
Вы должны быть в состоянии переопределить это так...
var _print = window.print;
window.print = function() {
alert("Hi!");
// do stuff
_print();
}
"В основном из-за IE мне нужно..."
Если вам нужна только поддержка IE, смотрите событие onbeforeprint.
window.onbeforeprint = function () {
// some code
}
Преимущество здесь в том, что код не будет работать в браузерах, которые не поддерживают onbeforeprint, что практически во всех браузерах, кроме IE.
Эта функция работает для всех браузеров, включая IE, независимо от того, как вызывается печать:
/**
* Adds listeners for crossbrowser print callback
* @param callback - callback function
*/
function onPrint(callback) {
window.matchMedia('print').addListener(query => query.matches ? callback() : null)
window.addEventListener('beforeprint', () => callback())
}
onPrint(() => console.log('printing!'))
Имейте в виду, что это может запустить функцию обратного вызова дважды, в зависимости от браузера. Это можно обойти с помощью временного флага.
Попробуйте поставить другой <script>
пометьте перед тем, к которому у вас нет доступа, например:
<html><head></head><body></body><script>alert('Hello There !');</script><script>window.print();</script></html>
Более чистый и современный способ справиться с этим:
window.addEventListener('beforeprint', () => {
// before print, do something
});