2015-03-12 8 views
0

У меня есть требование о печати документов, и я использую ScriptX для этой цели. Все работает нормально и печатает документы в IE11. Но в IE8 я получаю сообщение об ошибке: Ошибка: значение свойства '$' равно null или undefined, а не объект Function.Функция ScriptX Print не работает в IE8

Мой печати код выглядит следующим образом

function PrintFunctionality(url, title,data) 
{ 

    if (!!navigator.userAgent.match(/Trident\/7\./)) { 

     //alert('ie browser'); 
     var printWindow = window.open('', '', 'height=400,width=800'); 
     var htmltext = '<html><head><title>' + title + '</title>'; 
     htmltext += "<object id='factory' style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814' codebase='http://localhost/smsx.cab#Version=7,5,0,20'></object>"; 
     htmltext += "<script src='http://localhost/jquery-1.8.2.min.js'></script>"; 
     htmltext += "<script src='http://localhost/meadco-scriptx-1.0.2.js' type='text/javascript'></script>"; 
     htmltext += "<script type='text/javascript'>"; 
     htmltext += "$(function() {"; 
     htmltext += "if (MeadCo.ScriptX.Init()) {MeadCo.ScriptX.PrintPage(false);}});</script>"; 
     htmltext += '</head><body>'; 
     htmltext += data; 
     htmltext += '</body></html>'; 
     printWindow.document.write(htmltext); 
     printWindow.document.close(); 
     printWindow.focus(); 
     printWindow.print(); 
     printWindow.close(); 

     return false; 
    } 
}; 

и установленную версию сценария х в моей системе:

Установленная версия ScriptX является: 7.5.0.20

Установленная версия диспетчера безопасности: 7.5.0.20

Установленная версия компонента печати: 7.5.0.20

Любая вещь для изменения кода для работы в IE8?

ответ

0

фона - Есть целый ряд вопросов:

  1. функциональность печати, как показано не будет работать, так как IE 8 Trident v4
  2. Код в предположении, что поведение на document.close() является синхронно - это не так. Синхронизация загрузки файлов сценариев и инициализации ScriptX не происходит. когда printWindow.close() называется браузером, возможно, все еще загружает материал и/или запускает код запуска и убивает окно, прежде чем у него появится возможность начать печать. Это работает с IE11, потому что все в кеше, и оно используется на «быстрой» машине.
  3. jQuery не инициализируется должным образом в этом сценарии (доказательство: удалите все ссылки на ScriptX и скрипт, оставляя просто включение jQuery и $ (function() {}}); - все еще ошибки даже с jQuery 1.3
  4. Код пытается напечатать документ дважды. - через MeadCo.ScriptX.PrintPage() и printWindow.print()

в этом случае, Jquery и meaco-ScriptX-1.0.2 не дают реальной пользы

.

Это временное окно, которое должно быть в состоянии предположить, что ScriptX уже установлен. Ответ/изменение, чтобы заставить его работать в любой версии IE, - это d-школа:

function PrintFunctionality(url, title, data) { 
    var printWindow = window.open('', '', 'height=400,width=800'); 
    var htmltext = '<html><head><title>' + title + '</title>'; 
    htmltext += "<object id='factory' style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814'></object>"; 
    htmltext += "<" + "script type='text/javascript'>"; 
    htmltext += "function printDocument() { window.setTimeout('window.close()',3000); factory.printing.print(false); }</" + "script>"; 
    htmltext += "</head><body onload='printDocument()'>"; 
    htmltext += data; 
    htmltext += '</body></html>'; 
    printWindow.document.write(htmltext); 
    printWindow.document.close(); 
    return false;    
} 

Обратите внимание, что окно закрывается сама, и это делает после того, как задержка, которая считается достаточно долго для печати до завершения (намотана). Это причуда этого сценария, что вы должны вызвать window.setTimeout() перед вызовом factory.printing.print() или тайм-аут может не срабатывать.

Смежные вопросы