sciter 资源打包和加载的步骤
By
terrorist
at 2022-04-26 • 0人收藏 • 1195人看过
使用 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资源。