Как вы печатаете из всплывающего окна в javascript?
у меня есть приложение .Net, которое динамически создает небольшую HTML-страницу и всплывает в новом окне с помощью документа javascript.открытый способ. Все с этой функциональностью работает нормально.
теперь я хочу добавить кнопку на HTML-страницу, которая печатает страницы. Я попытался использовать следующий код безрезультатно:
<a href='print.html' onClick='window.print();return false;'>
<img src='images/printer.png' height='32px' width='32px'></a>
при нажатии кнопки во всплывающем окне, ничего не происходит. Но когда исходный код этой страницы сохраняется и загружается в браузере как отдельной странице, кнопка печати работает отлично. Итак, похоже, что проблема вызвана тем, что код во всплывающем окне. [проблема теперь заключается в том, что код записывается во всплывающее окно после его открытия.] Кто-нибудь знает способ решить эту проблему или какие-либо альтернативы?
EDIT:
другой метод, который я пробовал с тем же результатом:
<input type='button' onclick='window.print()' value='Print' />
и
<a href='javascript:window.print()'>
<img src='images/printer.png' height='32px' width='32px'></a>
изменить Опять:
приведенный выше код работает в Firefox, но не в IE7. Есть идеи по работе вокруг IE?
РЕДАКТИРОВАТЬ ЕЩЕ РАЗ:
вот тестовый пример с использованием кода, который npup опубликовано ниже. Вместо кода для всплывающего окна, живущего в отдельном html-файле, я открываю пустой url-адрес, а затем пишу код к нему. Этот шаг, по-видимому, является причиной проблемы.
<html>
<head>
<title>main</title>
</head>
<body>
<h1>
Pop & print</h1>
<button onclick="pop();">
Pop</button>
<script type="text/javascript">
var POP;
function pop() {
var newWin = window.open('', 'thePopup', 'width=350,height=350');
newWin.document.write("<html><head><title>popup</title></head><body><h1>Pop</h1>" +
"<p>Print me</p><a href='print.html' onclick='window.print();return false;'>" +
"<img src='images/printer.png' height='32px' width='32px'></a></body></html>");
}
</script>
</body>
</html>
9 ответов
вот решение, которое сработало для меня:
newWin.document.write( newhtml );
newWin.window.location.reload(); // this is the secret ingredient
newWin.focus(); // not sure if this line is necessary
newWin.print();
Я не уверен на 100%, почему это работает, но я думаю, что это связано с одним из следующих: (1) проблема безопасности IE, (2) Проблема области (т. е. после создания нового документа, IE запутался в том, какой документ печатать) или (3) проблема времени - документ еще не готов "принять" команду печати. В любом случае, после перезагрузки диалог печати появляется без проблем.
это может быть потому, что вы делаете return false в событии onclick тега привязки.
попробуйте это:
<input type="button" onclick="window.print()" value="Print" />
можно попробовать:
<input type="button" onclick="self.print()" value="Print" />
или:
<input type="button" onclick="window.focus();window.print()" value="Print" />
но это может не работать в MSIE из-за ограничений в Кросс-Рамки Сценариев. Лучший способ сделать это, я думаю, это поставить кнопку печать в главном окне.
<script language="javascript">
var winref = window.open('print.html','windowName','width=400,height=400');
</script>
<form>
<input type="button" value="Print Popup" onclick="if (window.print) winref.print()">
</form>
должно быть что-то большее, чем показанный код. Я думаю, что он работает нормально (тестировал некоторые сейчас).
вот небольшой тестовый пример. Попробуйте в своей настройке и посмотрите, что произойдет! Моя проверка была под Windows Vista, IE7 и IE8.
main.HTML-код:
<html>
<head>
<title>main</title>
</head>
<body>
<h1>Pop & print</h1>
<button onclick="pop();">Pop</button>
<script type="text/javascript">
var POP;
function pop() {
POP = window.open('popup.html', 'thePopup', 'width=350,height=350');
}
</script>
</body>
</html>
всплывающее окно.HTML-код:
<html>
<head>
<title>popup</title>
</head>
<body>
<h1>Pop</h1>
<p>Print me</p>
<a href="print.html" onclick="window.print();return false;">
<img src="images/printer.png" height="32px" width="32px">
</a>
</body>
</html>
Я решил проблему, создав пустую HTML-страницу со стандартной разметкой HTML. Затем я добавил содержимое, создав новый элемент DOM и отредактировав innerHTML. Полученный код такой же, как и в Примере, просто заменяет newWin.документ.напишите команду со следующим:
var newDiv = newWin.document.createElement( 'div' );
newDiv.innerHTML = "<h1>Pop</h1>" +
"<p>Print me</p><a href='print.html' onclick='window.print();return false;'>" +
"<img src='images/printer.png' height='32px' width='32px'></a>"
newWin.document.body.appendChild(newDiv);
хотя проблема была решена, я честно не уверен, что было точной причиной проблемы. Если у кого-то есть идеи, буду рад их услышать.
вы забыли:
newWin.document.close();
документ должен быть закрыт, прежде чем msie сможет его распечатать.
это работает в Chrome:
<body ><img src="image.jpg" alt="" style="display: block; width: 100%; height: 100%;">
<script type="text/javascript">
window.onload = function() {
window.print();
setTimeout(function() {
window.close();
}, 1);
};
</script>
</body>
Если вы хотите распечатать то, что находится в открывшемся окне С, Я предлагаю вам использовать
window.opener.print();
в выпадающем окне.
Я хотел создать дружественную к принтеру версию страницы, которая затем автоматически печатается, это то, что я придумал, кажется, отлично работает для меня!
function printPage(){
var w = window.open();
var headers = $("#headers").html();
var field= $("#field1").html();
var field2= $("#field2").html();
var html = "<!DOCTYPE HTML>";
html += '<html lang="en-us">';
html += '<head><style></style></head>';
html += "<body>";
//check to see if they are null so "undefined" doesnt print on the page. <br>s optional, just to give space
//This allows you to reuse this on lots of pages with the same template
if(headers != null) html += headers + "<br/><br/>";
if(field != null) html += field + "<br/><br/>";
if(field2 != null) html += field2 + "<br/><br/>";
html += "</body>";
w.document.write(html);
w.window.print();
w.document.close();
};