Надстройка IE для обхода диалога печати — с чего начать?

Мне нужно написать надстройку/плагин для IE 6/7, который будет перехватывать любой вызов Javascript print() и автоматически печатать страницу на принтере по умолчанию, минуя стандартный диалог печати. К сожалению, я очень мало знаю о программировании для Windows или IE (я родом из страны Какао), поэтому я немного не знаю, с чего начать. Я думаю написать BHO, но не уверен. Любая помощь горячо приветствуется.

Я обнаружил способ добиться этого эффекта в VBScript, который находится на веб-странице (переопределяя функцию печати), поэтому, если это так же просто, как обернуть этот код в какой-то плагин, это было бы идеально.


person Rich Catalano    schedule 16.01.2009    source источник


Ответы (3)


Попробуйте это.

if(navigator.appName == "Microsoft Internet Explorer"){
  var PrintCommand = '<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
  document.body.insertAdjacentHTML('beforeEnd', PrintCommand);
  PrintCommandObject.ExecWB(6, 2);
  PrintCommandObject.outerHTML = "";
} else {
  window.print();
}

Но это не работает в Windows XP SP2 (и Windows Server 2003 SP1 или выше).

person scunliffe    schedule 16.01.2009
comment
Это то же самое, что и VBScript, который у меня есть. Мне нужно дополнение. - person Rich Catalano; 16.01.2009

Я написал и управление ActiveX для этого много лет назад.

И это было три два кода.

SendKeys( cntrl + P )
SendKeys( enter )
person Chad Grant    schedule 09.05.2009

Я могу добиться подавления нескольких диалогов печати в IE11 с помощью следующего сценария.

function callThisPrintFunction() {

  var isIE11 = !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  if (navigator.appName == "Microsoft Internet Explorer" || isIE11== true) {

    var PrintCommand = '<OBJECT ID="PrintCommandObject" WIDTH=0 HEIGHT=0 ';
    PrintCommand += 'CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
    document.body.insertAdjacentHTML('beforeEnd', PrintCommand);
    PrintCommandObject.ExecWB(6, 2); PrintCommandObject.outerHTML = "";
    window.close();
  }
  else {
    window.print();
  }
}

Вопрос: Есть ли способ добиться этого в Chrome/Firefox?

person Manithan    schedule 30.07.2019