sciter 资源打包和加载的步骤
By
terrorist
at 2022-04-26 • 0人收藏 • 1083人看过
使用 packfolder.exe - 它会将文件夹与您的资源(html、css、脚本)压缩成二进制 blob
一 打包
sciter 的打包器在 \sciter-js-sdk-main\bin\windows\packfolder.exe ,
命令行格式
packfolder.exe folder outfile [options]
假设资源文件在 res 目录, 输出文件名字 resources.bin ,那么命令为:
packfolder.exe res resources.bin -binary
二 添加函数
先在 web.sciter.api 补充几个 API
ptr OpenArchive = "ptr(ptr archiveData,INT archiveDataLength)"; ptr GetArchiveItem = "bool(ptr harc,ustring path, pointer& pdata, INT& pdataLength)"; ptr CloseArchive = "bool(ptr harc)";
在 web.sctier 的 ..util.metaProperty 补充几个函数
openArchive = function(path){ // 不能用 var 会被回收 owner.archiveBuffer = ..string.loadBuffer(path) if(owner.archiveBuffer){ owner.harc = ::Sciter.OpenArchive(owner.archiveBuffer, #owner.archiveBuffer) } } closeArchive = function(){ if(owner.harc){ return ::Sciter.CloseArchive(owner.harc); } }
在 _defaultNotifyHandler [ 0x01/*_SC_LOAD_DATA*/ ] 函数 的 var uri = fromUnicode(nmld.uri,,true); 后面加入
if( ..string.startWith(uri, "this://app/") ){ var url = ..string.slice(uri,12) var ok, fileData, len = ::Sciter.GetArchiveItem(this.harc, url, null, 0) if(ok){ // var b = ..raw.buffer(len, fileData) ::Sciter.DataReady(nmld.hwnd, url, fileData, len); return 0/*_LOAD_OK*/; } }
三 使用
把打包后的文件放到工程的资源目录
wb.openArchive("/res/resources.bin") wb.go("this://app/main.html")
3 个回复 | 最后更新于 2022-04-30
开发时可以载入没打包的资源
import web.sciter if(_STUDIO_INVOKED){ import web.sciter.inspector } var wb = web.sciter(mainForm) if(_STUDIO_INVOKED){ import web.sciter.debug; wb.attachEventHandler( web.sciter.debug ); wb.go("/sciter dev/main.html") } else { wb.openArchive("/res/resources.bin") wb.go("this://app/main.html") }
另外编辑工程发布前触发 \.build\default.init.aardio 文件,让打包自动化。把资源打包到工程的资源目录,然后同步目录等步骤写进去( 目前 ide 没有开放同步资源目录的接口)
登录后方可回帖
感谢分享,收藏了
aardio本来就可以内嵌html资源到exe里,
貌似这种方式可以用来隐藏资源文件,不容易被还原ui代码,内嵌res能用pe工具提取ui资源。