Как Вы печатаете от всплывающего окна в JavaScript?

У меня есть приложение .NET, которое динамично создает маленькую страницу HTML и раскрывается она в новом окне с помощью JavaScript document.open метод. Все с той функциональностью хорошо работает.

Теперь я хочу добавить кнопку к странице HTML, которая печатает страницу. Я попытался использовать следующий код напрасно:



Когда кнопка нажата во всплывающем окне, ничего не происходит. Но когда исходный код этой страницы сохраняется и загружается в браузере как отдельная страница, кнопка печати работает отлично. Таким образом, казалось бы, что проблема вызывается тем, что код находится во всплывающем окне. [Проблема теперь, кажется, что код в записанном к всплывающему окну после того, как это будет открыто.] Кто-либо знает способ решить эту проблему или какие-либо альтернативы?

Править:

Другой метод, который я попробовал теми же результатами:


и



ОТРЕДАКТИРУЙТЕ СНОВА:

Вышеупомянутый код работает в Firefox, но не в IE7. Какие-либо идеи о работе вокруг для IE?

РЕДАКТИРОВАНИЕ ВСЕ СНОВА И СНОВА:

Вот тестовый сценарий с помощью кода тот npup отправленный ниже. Вместо кода для всплывающего окна, живущего в отдельном файле HTML, я открываю пустой URL и затем пишу код к нему. Этот шаг, кажется, то, что вызывает проблему.



    main


    

Pop & print

6
задан Community 23 May 2017 в 12:20
поделиться

6 ответов

Я решил проблему, создав пустую страницу 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);

Хотя проблема была решена, я, честно говоря, не уверен, в чем была точная причина проблемы. Если у кого-то есть идеи, буду рад их услышать.

1
ответ дан 8 December 2019 в 14:42
поделиться

Это могло произойти из-за того, что вы возвращаете false в событии onclick тега привязки.

Попробуйте следующее:

<input type="button" onclick="window.print()" value="Print" />
3
ответ дан 8 December 2019 в 14:42
поделиться

Если вы хотите распечатать то, что вы открыли в окне из, я предлагаю вам использовать

window.opener.print();

во всплывающем окне.

0
ответ дан 8 December 2019 в 14:42
поделиться

Вы можете попробовать:

<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>
1
ответ дан 8 December 2019 в 14:42
поделиться

Это должно быть что-то большее, чем показанный код. Я думаю, что он работает нормально (сейчас тестировал).

Вот небольшой тестовый пример. Попробуйте это в своей настройке и посмотрите, что произойдет! Моя проверка была под 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>
1
ответ дан 8 December 2019 в 14:42
поделиться

Вы забыли:

newWin.document.close();

Документ должен быть закрыт, прежде чем msie сможет его распечатать.

1
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: