我需要打印文档,我正在使用ScriptX来实现此目的。 一切正常,并在IE11中打印文档。但在IE8中,我收到错误,错误:属性'$'的值为null或未定义,而不是Function对象。
我的打印代码如下所示
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;
}
};
我系统中安装的脚本x版本是:
ScriptX的已安装版本为:7.5.0.20
安装的安全管理器版本为:7.5.0.20
Print组件的安装版本为:7.5.0.20
要为IE8工作的代码有什么改变吗?
答案 0 :(得分:0)
背景 - 存在许多问题:
在这种情况下,jQuery和meaco-scriptx-1.0.2没有任何实际好处。
这是一个临时窗口,应该可以假设已经安装了ScriptX。使其在任何版本的IE中都可以使用的答案/更改是老去学校:
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;
}
请注意,窗口自行关闭,并且在延迟被认为足够长以使打印完成(假脱机)之后。这种情况的一个怪癖是,在调用factory.printing.print()之前必须调用window.setTimeout(),否则可能不会触发超时。