![]() |
extension | mime-type |
xpi | application/x-xpinstall |
crx | application/x-chrome-extension |
文件名 | 用途 | 文件尺寸 | |
核心包 | supcan.xpi | 用于![]() | 110k |
supcan.crx | 用于![]() | 120k | |
supcan2.cab | 用于![]() | 120k | |
supcan2.x64.cab | 用于64位 ![]() | 140k | |
BCV1.bin | 硕正树列表、自由表头等基础功能组件 (7z压缩包) | 680k | |
LuxForm.bin | 硕正报表组件 (7z压缩包) | 420k | |
License.bin | 授权证书包 | 1k | |
可选包 | BCV4.bin | 硕正Freeform设计器 (7z压缩包) | 60k |
gzip.bin | 让硕正套件能读取后端gzip压缩后的数据 注:首次使用时能自动下载 | 16k | |
msoffice.bin | 用于读写Excel 2007 注:首次使用时能自动下载 | 50k | |
LuxFormC.bin | 用于Report的申报模式 注:首次使用时能自动下载 | 30k | |
WebFile.bin | 用于文件的上传下载 注:首次使用时能自动下载 | 20k | |
barcode.cab | 用于显示条形码 注1:首次使用时能自动下载; 注2:该文件不在zip包中, 需要您单独到 www.supcan.cn 下载区的 "其它第三方功能组件" 中去下载, 再将其部署到binary目录; 注3.条形码功能不支持64位浏览器; | 1.1M | |
64位包 | 同名的 *.x64.bin | 用于64位IE浏览器 | 约1.7M |
<Object id=? width=? height=? type="application/supcan-plugin" Codebase="supcan.xpi">
<Object id=? width=? height=? type="application/supcan-plugin" Codebase="supcan.crx">
<Object id=? width=? height=? CLASSID="clsid:619F1AC0-2644-40D3-9EB1-22F81C5FE097" Codebase="supcan2.cab#Version=1,0,0,3">
(64位)<Object id=? width=? height=? CLASSID="clsid:11249C26-4BCD-4A74-B4D9-068936D77EFE" Codebase="supcan2.x64.cab#Version=1,0,0,3"> <Param name="CtlName" value="?"> <Param name="CtlVersion" value="?"> <Param name="ZipUrl" value="?"> <Param name="CtlPara" value="?"> <Param name="DownloadOnly" value="?"> <Param name="Cookie" value="?"> //for
、
Only <Param name="id" value="?"> //for
Only </Object>
参数名 | 含义 | 可用值 | 默认值 |
CtlName | 功能组件名 | 取决于具体组件的规范 | |
CtlVersion | 组件版本号。版本号很重要,决定了功能组件的自动升级更新。 | 诸如“1.0.1.0”等,以“.”分隔 | |
ZipUrl | 组件所在的压缩包的URL,多个URL之间以逗号分隔。 即告诉插件/加载项,到哪里去下载组件包 | 可以是绝对URL,也可以是相对URL | |
CtlPara | 初始参数。即告诉插件/加载项,如何创建功能组件实例。 | 取决于具体组件的规范 | |
DownloadOnly | 是否仅仅下载组件。如果仅是下载,那么将不创建组件实例。 该参数不太常用. | 1/0 - 是/否 | 0 |
Cookie | 用于![]() ![]() 备注:IE浏览器中的加载项和组件肯定能和页面共享Session,故不需要此参数 | 通常为document.cookie | |
id | 用于![]() 备注:FireFox、Chrome插件能通过NPAPI取得<object id=...>中的id,故不需要此参数 | 必须和<object id=? ...>一致 |
//区分浏览器(Firefox / Chrome / IEx86 / IEx64) var $agnt=navigator.userAgent.toLowerCase(); var $isChrome = false, $is64 = false; var $isIE = ($agnt.indexOf("msie")>0) ? true : false; if($isIE) { if($agnt.indexOf("win64")>=0 || $agnt.indexOf("x64")>=0) $is64 = true; } else { if($agnt.indexOf("chrome")>0) $isChrome = true; } //private: function bldStr(ctlType, id, para) { //!!!!组件版本号,升级后须修改!!! var ctlver = '1.0.75.0'; //取得组件包的绝对路径(假设和dynaload.js部署在同一个目录) var SupcanPath="", arrScript = document.getElementsByTagName("script"); for(var i=0; i相信您一看就能明白,在页面中只要调用从65到72行之间的任一函数就行,这几个函数都只有2个参数:id、para,参数id就是<object id=...>中的id值,参数para就是名为CtlPara的<Param>的值。= 0) { SupcanPath = src.substring(0, index); if(SupcanPath.charAt(0) == '/') { src = location.href; index = src.indexOf('//'); if(index != -1) { index = src.indexOf('/', index+2); if(index != -1) src = src.substring(0, index); SupcanPath = src + SupcanPath; } } break; } } var typeid; if($isIE) { if($is64) typeid = 'CLASSID="clsid:11249C26-4BCD-4A74-B4D9-068936D77EFE" Codebase="' +SupcanPath+ 'supcan2.x64.cab#Version=1,0,0,3"'; else typeid = 'CLASSID="clsid:619F1AC0-2644-40D3-9EB1-22F81C5FE097" Codebase="' +SupcanPath+ 'supcan2.cab#Version=1,0,0,3"'; } else { typeid = 'type="application/supcan-plugin"'; if($isChrome==false) typeid += ' Codebase="' +SupcanPath+ 'supcan.xpi"'; } //组件包URL var zipurl = SupcanPath + ($is64 ? "BCV1.x64.bin" : "BCV1.bin"); if(ctlType=="LuxForm") zipurl += "," +SupcanPath+ ($is64 ? "LuxForm.x64.bin" : "LuxForm.bin"); else if(ctlType.indexOf("BCV4")>=0) zipurl += "," +SupcanPath+ ($is64 ? "BCV4.x64.bin" : "BCV4.bin"); var str = '<Object id=' +id+ ' Width=100% height=100% ' +typeid+ '>'; str += '<param Name="CtlName" Value="' +ctlType+ '">'; str += '<param Name="CtlVersion" Value="' +ctlver+ '">'; str += '<param Name="ZipUrl" Value="' +zipurl+ '">'; str += '<param Name="id" Value="' +id+ '">'; str += '<param Name="Cookie" Value="' +document.cookie+ '">'; str += '<param Name="CtlPara" Value="' +para+ '"></Object>'; return str; } //public: function insertTreeList(id, para) { document.write( bldStr("BCV1.TreeList",id, para) ) } function insertEdit(id, para) { document.write( bldStr("BCV1.Edit", id, para) ) } function insertReport(id, para) { document.write( bldStr("LuxForm", id, para) ) } function insertTree(id, para) { document.write( bldStr("BCV1.Tree", id, para) ) } function insertFreeForm(id, para) { document.write( bldStr("BCV1.FreeForm",id, para) ) } function insertChart(id, para) { document.write( bldStr("BCV1.Chart", id, para) ) } function insertUpload(id, para) { document.write( bldStr("BCV1.Upload", id, para) ) } function insertFormDesigner(id, para) { document.write( bldStr("BCV4.FormDesigner",id, para) ) } //必需的函数(控件会反向调用,用途:切换焦点) function focusIE(obj_or_id) { if($isIE==false) { document.activeElement.blur(); return; } try { if(typeof(obj_or_id)=='object') { if(document.activeElement != obj_or_id) obj_or_id.focus(); } else { if(document.activeElement.id == obj_or_id) return; var o = document.getElementById(obj_or_id); if(o != null) o.focus(); } } catch(e) { } }
<html> <head> <meta http-equiv="content-type" content="text/html; charset=GB2312"> <!--引用dynaload.js。后面的"?20"是让浏览器及时刷新的时间戳,请参见“常见问题解答”--> <script type='text/javascript' src='binary/dynaload.js?20'></script> </head> <body> <script>insertReport('AF', '')</script> //AF是Object的id号、第二个参数为空表示没有初始参数 </body> </html>你将在页面上看到一个空的硕正报表,一切就那么简单!
... <tr height="400"> <td height="400"> <script>insertReport('AF', '')</script> </td> </tr> ...
<div style="position:relative;width:96%;height:400px"> <script>insertReport('AF', '')</script> </div>
string func(string funcname, string para); 参数funcname:字符串,是组件的真正的函数名,请参见具体组件的规范; 参数para:字符串,参数,如果组件需要传入多个参数,那么以回车符(\r\n)分隔,请参见具体组件的规范; 返回值:字符串,具体含义请参见组件的规范; |
//要求组件执行print('A', 'B', 'C')函数,并将返回值赋给变量 s var s=AF.func("print", "A\r\nB\r\nC"); //注1: AF为组件的id(<Object id=? ...>),在Firefox/Chrome中没有必要采用document.getElementById('AF'); //注2: para参数中A、B、C以回车分隔,表示实际传递了3个参数;功能组件的函数是很丰富的,在各自的文档中有详细的介绍,在此不作叙述。
<script> //OnReady 事件 //id参数说明:如果页面中有多个插件/加载项,那么OnReady事件会被触发多次,id就是插件/加载项的id function OnReady( id ) { //假如执行如下js if(id=='AF') AF.func('ReadXML', 'index.XML'); } //OnEvent 事件 //OnEvent参数说明: “Event”为事件名,p1,p2,p3,p4参数有特定的含义,由具体的功能组件规定. function OnEvent(id, Event, p1, p2, p3, p4) { //假如执行如下js if(id=='AF' && Event == "SelChanged") document.getElementById('Page1').src=p2; } </script>对上例稍加分析,你会发现所谓“事件”只是普通的页面 js 函数,只不过这二个函数名被硕正插件/加载项占用了,当组件触发事件时,实际上就是由插件/加载项反向调用页面的 js 函数而已!
<meta http-equiv="content-type" content="text/html; charset=gb2312"> //或 <meta http-equiv="content-type" content="text/html; charset=utf-8">否则页面调用插件的函数时,参数中的中文很可能会变成乱码.
... function OnReady(id) { AF.func("Build", "g1.xml"); } ... <form name="form1"> <script>insertReport('AF', '')</script> </form> ...IE执行到第4行会抛出 'AF'未定义的错误,此时改成如下写法就能成功:
... function OnReady(id) { form1.AF.func("Build", "g1.xml"); } ...当然,您也可以把 上面insertReport( )的语句移出form,这样就不会有这个问题了。