Javascript window.open и печати вызывает зависание IE8 - PullRequest
3 голосов
/ 03 августа 2011

Я пытаюсь использовать window.open () для создания всплывающего окна, которое затем печатает, но у меня возникают проблемы с зависанием IE8 после его появления.


Подробнее:

В конце моего приложения я пытаюсь распечатать выводимую информацию, но я пытаюсь включить отдельные CSS, jQuery и Javascript в это всплывающее окно.Я думаю, что именно эти внешние ссылки приводят к зависанию IE8, но я не уверен.

Что происходит во всех других браузерах, которые я тестировал, это всплывающее окно, появляется диалоговое окно печати ипечатает нормально.

В IE8 всплывает окно, появляется контент и загружается CSS, но не Javascript.Если вы пытаетесь печатать вручную (Ctrl + P), он печатает без CSS.

Я попробовал следующие примеры: Элементы скрипта, написанные с document.write в окне, открытом с помощью window.openне выполняются в IE8 в Windows 7


Live демо

Если вы хотите увидеть живую версию, пожалуйста, посетите: http://roxulmaterialscalculator.com/ Вы должны будете заполнить информацию, требуемую приложением, если вы действительно хотите получить часть печати.(На втором шаге требуется просто заполнить радиовходы).

Чтобы увидеть полный JavaScript: http://roxulmaterialscalculator.com/js/scripts.js, где вы найдете другие методы, которые я пробовал.


Код

Передает элементы в функцию

$('#actionPrint').live('click', function(event){
    printElem('#rc');
}

Открывает элемент и печатает его.

function printElem(elem) {
    popup($j(elem).html());
}

 function popup(data) {
    var mywindow = window.open('', 'printSheet', 'height=500,width=800,scrollbars=1');
    mywindow.document.open();
    mywindow.document.write('<html><head><title>Roxul Insulation Calculator</title>');
    mywindow.document.write('</head><body>');
    mywindow.document.write('<div id="rc_logo"><img src="img/roxul-logo.png" alt="roxul-logo" /></div>');
    mywindow.document.write(data);
    mywindow.document.write('</body></html>');

    var c = mywindow.document.createElement("link");
        c.rel = "stylesheet";
        c.type = "text/css";
        c.href = "css/print.css";
        mywindow.document.getElementsByTagName("HEAD")[0].appendChild(c);

    var s = mywindow.document.createElement("script");
        s.type = "text/javascript";
        s.src = "js/jquery-1.5.2.min.js";
        mywindow.document.getElementsByTagName("HEAD")[0].appendChild(s);

    var s2 = mywindow.document.createElement("script");
        s2.type = "text/javascript";
        s2.src = "js/print.js";
        mywindow.document.getElementsByTagName("HEAD")[0].appendChild(s2);

    mywindow.print();
    return true;
 }

1 Ответ

5 голосов
/ 03 августа 2011

Я решил свой собственный вопрос, так что, надеюсь, неплохо было бы ответить на свой вопрос.

Моя ошибка не включала mywindow.document.close(); в конце моей функции.Теперь это выглядит следующим образом:

mywindow.print();
mywindow.document.close();
return true;

Я говорил с одним из разработчиков, с которым я работаю, и он говорит, что document.close() освобождает ресурс для печати. ​​

...