У меня есть приложение .NET, которое динамично создает маленькую страницу HTML и раскрывается она в новом окне с помощью JavaScript document.open метод. Все с той функциональностью хорошо работает.
Теперь я хочу добавить кнопку к странице HTML, которая печатает страницу. Я попытался использовать следующий код напрасно:
Когда кнопка нажата во всплывающем окне, ничего не происходит. Но когда исходный код этой страницы сохраняется и загружается в браузере как отдельная страница, кнопка печати работает отлично. Таким образом, казалось бы, что проблема вызывается тем, что код находится во всплывающем окне. [Проблема теперь, кажется, что код в записанном к всплывающему окну после того, как это будет открыто.] Кто-либо знает способ решить эту проблему или какие-либо альтернативы?
Править:
Другой метод, который я попробовал теми же результатами:
и
ОТРЕДАКТИРУЙТЕ СНОВА:
Вышеупомянутый код работает в Firefox, но не в IE7. Какие-либо идеи о работе вокруг для IE?
РЕДАКТИРОВАНИЕ ВСЕ СНОВА И СНОВА:
Вот тестовый сценарий с помощью кода тот npup отправленный ниже. Вместо кода для всплывающего окна, живущего в отдельном файле HTML, я открываю пустой URL и затем пишу код к нему. Этот шаг, кажется, то, что вызывает проблему.
main
Pop & print
Я решил проблему, создав пустую страницу HTML со стандартной разметкой HTML. Затем я добавил контент, создав новый элемент DOM и отредактировав innerHTML. Результирующий код такой же, как в примере, просто заменив команду newWin.document.write следующей:
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);
Хотя проблема была решена, я, честно говоря, не уверен, в чем была точная причина проблемы. Если у кого-то есть идеи, буду рад их услышать.
Это могло произойти из-за того, что вы возвращаете false в событии onclick тега привязки.
Попробуйте следующее:
<input type="button" onclick="window.print()" value="Print" />
Если вы хотите распечатать то, что вы открыли в окне из, я предлагаю вам использовать
window.opener.print();
во всплывающем окне.
Вы можете попробовать:
<input type="button" onclick="self.print()" value="Print" />
или:
<input type="button" onclick="window.focus();window.print()" value="Print" />
Но это может не работать в MSIE из-за ограничений в Cross-Frame Scripting. Лучший способ, как мне кажется, это поместить кнопку печати в главное окно.
<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>
popup.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>
Вы забыли:
newWin.document.close();
Документ должен быть закрыт, прежде чем msie сможет его распечатать.