일주일 전 부터 엣지, 크롬 에서 프린트창이 뜨질 않습니다. 자바스크립트

일주일 전 부터 엣지, 크롬 에서 프린트창이 뜨질 않습니다. 자바스크립트

QA

일주일 전 부터 엣지, 크롬 에서 프린트창이 뜨질 않습니다. 자바스크립트

답변 1

본문

2010년 쯤 만들어서 지금까지 잘 써오고 있고요

익스플로러11, 엣지, 크롬에서 잘 동작되다가

일주일 전 부터 엣지, 크롬 에서 프린트창이 뜨질 않습니다.

엣지는 익스플로러모드로 전환하면 프린트창이 뜨고요 ㅠㅠ

사이트는    http://www.lcscore.com  테스트 ID test / 비번 1234

메뉴중에서
단어출제 > 일반단어장
으로 가서

1. 제목 아무거나 넣고
2. 단어장 아무거나 선택하고 (예를들어 제일 위에 것으로 선택)
3. 시험지구성은 손 댈 것 없고
4. 범위는 그냥 1 ~ 10 정도 입력한 후
선택완료를 누르면

[문제지출력] 버튼과 [정답지출력] 버튼이 나옵니다

[문제지출력] 버튼을 누르면 출력될 시험지 내용이 나오면서

[출력하기] 버튼도 생성이 되고요
인쇄를 하기 위해 [출력하기]를 누르면

지금까진 인쇄창이 잘 나왔는데;;

 

며칠 전 부터 [출력하기] 이 버튼이 엣지, 크롬 에서 프린트창이 뜨질 않습니다.

잘 쓰던게 갑자기 이러니 너무 답답합니다...

어떻게 소스를 수정해야 하는지 엄두가 나질 않네요

고수님들 한 수 지도 부탁드립니다.

 

 

이 질문에 댓글 쓰기 :

답변 1

해당 링크 코드를 아래 코드로 대채해 보세요.


<button onclick="window.print()">인쇄</button>

감사합니다. 저 테스트는 해 보았는데요....ㅜㅜ
smsx.cab 을 이용한 인쇄영역 제어방식이라서 마냥 저렇게만 하기가 힘듭니다 ㅠㅠ

<script type="text/javascript">

    function f_print()    {

      $('printNone').style.display = "none";

        factory.printing.header = "";          //머리글설정
        factory.printing.footer = "";            //꼬리글설정
        factory.printing.topMargin = 15;          //상여백
factory.printing.bottomMargin = 5;    //하여백
factory.printing.leftMargin = 5;          //좌여백
        factory.printing.rightMargin = 5;        //우여백
        factory.printing.Print(true);            //프린트 실행 false하면:프린트 설정화면 안보여짐 true하면: 보여짐

    }

</script>

잿봇이 아래의 답변을 주네요.

안녕하세요! 해당 코드에서 문제가 발생할 수 있는 부분은 $('printNone')입니다. 이 부분은 아마도 $ 함수가 정의되지 않아 발생하는 문제일 가능성이 높습니다. 이 경우, $ 함수를 정의해주는 라이브러리를 로드해야 합니다. 예를 들어, jQuery를 사용한다면 다음과 같이 코드를 수정할 수 있습니다.

function f_print() {
  $('#printNone').hide();

  factory.printing.header = "";
  factory.printing.footer = "";
  factory.printing.topMargin = 15;
  factory.printing.bottomMargin = 5;
  factory.printing.leftMargin = 5;
  factory.printing.rightMargin = 5;
  factory.printing.Print(true);
}

위 코드에서 $ 대신 jQuery를 사용하여 #printNone 요소를 숨기도록 수정하였습니다. 이렇게 수정하면 최근 버전의 크롬에서도 잘 작동할 것입니다.

추가로, 말씀하신 에러 내용으로 검색한 내용입니다.


에러 메시지를 보면 header 속성을 설정할 수 없다는 오류가 발생했다고 나와있습니다. 이는 factory.printing 객체가 정의되지 않았거나 factory.printing 객체의 header 속성이 정의되지 않았기 때문입니다.

해당 코드에서 factory.printing 객체를 사용하기 전에 먼저 해당 객체가 정의되었는지 확인해야 합니다. factory.printing 객체가 정의되지 않았다면 factory.printing 객체를 생성해주는 코드를 추가해야 합니다.

다음은 factory.printing 객체를 생성하는 코드를 추가한 예시입니다.

function f_print() {
  // #printNone 요소를 숨김
  $('printNone').style.display = "none";

  // factory.printing 객체를 생성하고 속성값을 설정
  if (typeof(factory) !== 'undefined' && typeof(factory.printing) === 'undefined') {
    factory.printing = new ActiveXObject("PrintManager.Printing");
  }
  if (typeof(factory.printing) !== 'undefined') {
    factory.printing.header = "";
    factory.printing.footer = "";
    factory.printing.topMargin = 15;
    factory.printing.bottomMargin = 5;
    factory.printing.leftMargin = 5;
    factory.printing.rightMargin = 5;
    factory.printing.Print(true);
  }
}

위 코드에서는 factory.printing 객체가 이미 정의되어 있는 경우에는 객체를 그대로 사용하고, 정의되어 있지 않은 경우에는 new ActiveXObject("PrintManager.Printing") 코드를 사용하여 factory.printing 객체를 생성하도록 했습니다.

이렇게 코드를 수정하면 해당 에러가 발생하지 않고 잘 작동할 것입니다.

sinbi님 너무 감사합니다.
수정하는데 많은 참고가 될 것 같습니다.

우선
제 사이트가 제이쿼리는 사용을 하지 않는 것 같고

헤드에서 불러오는 내용이 이것만 있네요


<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>스타벨 어휘관리 프로그램</title>
<link rel="stylesheet" type="text/css" href="/common/css/common.css" id="stylesheet" />
<script type="text/javascript" src="/common/js/common.js"></script>
<script type="text/javascript" src="/common/js/prototype_1_5_0.js"></script>
<script type="text/javascript" src="/common/js/xwz.datepick.v2.js"></script>
<script type="text/javascript" src="/common/js/calendar.js"></script>
<script type="text/javascript" src="/common/js/msg.js"></script>



그래도 테스트 해봤는데


function f_print() {
  $('#printNone').hide();

  factory.printing.header = "";
  factory.printing.footer = "";
  factory.printing.topMargin = 15;
  factory.printing.bottomMargin = 5;
  factory.printing.leftMargin = 5;
  factory.printing.rightMargin = 5;
  factory.printing.Print(true);
}


이 내용은

Uncaught TypeError: Cannot read properties of null (reading 'hide')
    at f_print (popup_vocabulary.php:28:18)
    at <anonymous>:1:1

이 메세지가 뜨네요.



마지막 내용으로 해 보니까


function f_print() {
  // #printNone 요소를 숨김
  $('printNone').style.display = "none";

  // factory.printing 객체를 생성하고 속성값을 설정
  if (typeof(factory) !== 'undefined' && typeof(factory.printing) === 'undefined') {
    factory.printing = new ActiveXObject("PrintManager.Printing");
  }
  if (typeof(factory.printing) !== 'undefined') {
    factory.printing.header = "";
    factory.printing.footer = "";
    factory.printing.topMargin = 15;
    factory.printing.bottomMargin = 5;
    factory.printing.leftMargin = 5;
    factory.printing.rightMargin = 5;
    factory.printing.Print(true);
  }
}


이런 메세지가 나옵니다.

Uncaught ReferenceError: ActiveXObject is not defined
    at f_print (popup_vocabulary.php:33:28)
    at <anonymous>:1:

말씀하신 에러 내용으로 질문해보니 이런 답변을 주네요
PS. ChatGPT 가입 후 직접 질문하시면서 해결해 보세요. (매우 쓸만해요.)

에러 메시지를 보면 ActiveXObject is not defined라는 메시지가 나온다는 것을 알 수 있습니다. 이는 ActiveXObject 함수가 정의되지 않았기 때문에 발생하는 오류입니다.

ActiveXObject는 브라우저에서 ActiveX 컨트롤을 사용하기 위해 사용되는 함수로, 일반적으로 인터넷 익스플로러 브라우저에서만 지원됩니다. 최근 대부분의 브라우저에서는 ActiveX 컨트롤을 지원하지 않기 때문에 이 함수를 사용할 수 없습니다.

따라서, factory.printing 객체를 사용하는 대신에 브라우저 자체적으로 제공하는 window.print() 함수를 사용하여 페이지를 인쇄하도록 코드를 수정할 필요가 있습니다. 다음은 window.print() 함수를 사용하는 예시 코드입니다.

function f_print() {
  // #printNone 요소를 숨김
  $('printNone').style.display = "none";

  // 페이지를 인쇄
  window.print();
}

위 코드는 window.print() 함수를 호출하여 페이지를 인쇄하도록 변경한 것입니다. 이렇게 수정하면 ActiveXObject is not defined 에러가 발생하지 않고, 대부분의 브라우저에서 잘 작동할 것입니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 2,663
© SIRSOFT
현재 페이지 제일 처음으로