feat(oss-browser-link): 实现一键注册+自动定位补丁功能
1. 新增oss-browser自动定位包装层脚本与注册批处理 2. 优化粘贴行为:焦点在输入框时交给浏览器默认粘贴 3. 新增一批调试与构建辅助脚本 4. 更新oss-browser下载页说明与步骤
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
// Trae-Toolbox oss-browser 包装层(resources/app/main.js)
|
||||
// 作用:启动时读取 exe 同目录 trae_default_oss_path.txt(第1行 oss 路径,第2行可选 region),
|
||||
// 并从本机 ~/Toolbox_local_creds.env.local 读取 DOC_CLOUD_KEEPER_OSS_* 凭据(运行时读取,零硬编码),
|
||||
// 注入渲染进程:写入 AuthInfo 并补丁 $rootScope.currentAuthInfo / bucketMap,
|
||||
// 使 oss-browser 每次启动即以有效账号登录、地址栏自动定位到默认目录;
|
||||
// 随后原样交接给官方 app.asar 内的 main.js,不改动官方包任何字节。
|
||||
// 卸载:删除 resources\app 目录与 trae_default_oss_path.txt 即恢复原版。
|
||||
const { app } = require('electron')
|
||||
const fs = require('fs')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
|
||||
const readDefaultConfig = () => {
|
||||
const cfg = { target: '', region: 'oss-cn-shanghai', id: '', secret: '' }
|
||||
try {
|
||||
const p = path.join(path.dirname(process.execPath), 'trae_default_oss_path.txt')
|
||||
if (fs.existsSync(p)) {
|
||||
const lines = String(fs.readFileSync(p, 'utf8')).split(/\r?\n/).map(l => l.trim()).filter(Boolean)
|
||||
if (lines[0] && lines[0].indexOf('oss://') === 0) cfg.target = lines[0]
|
||||
if (lines[1] && /^oss-[a-z0-9-]+$/.test(lines[1])) cfg.region = lines[1]
|
||||
}
|
||||
} catch (e) {}
|
||||
try {
|
||||
const p = path.join(os.homedir(), 'Toolbox_local_creds.env.local')
|
||||
if (fs.existsSync(p)) {
|
||||
const text = String(fs.readFileSync(p, 'utf8'))
|
||||
for (const line of text.split(/\r?\n/)) {
|
||||
const t = line.trim()
|
||||
if (!t || t.startsWith('#')) continue
|
||||
const eq = t.indexOf('=')
|
||||
if (eq <= 0) continue
|
||||
const k = t.slice(0, eq).trim()
|
||||
const v = t.slice(eq + 1).trim()
|
||||
if (k === 'DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_ID') cfg.id = v
|
||||
if (k === 'DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_SECRET') cfg.secret = v
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
return cfg
|
||||
}
|
||||
|
||||
const CFG = readDefaultConfig()
|
||||
|
||||
if (CFG.target) {
|
||||
const credPatch = (CFG.id && CFG.secret)
|
||||
? { id: CFG.id, secret: CFG.secret, eptpl: 'https://{region}.aliyuncs.com' }
|
||||
: null
|
||||
const injection =
|
||||
'(function () {' +
|
||||
' var TARGET = ' + JSON.stringify(CFG.target) + ';' +
|
||||
' var REGION = ' + JSON.stringify(CFG.region) + ';' +
|
||||
' var CRED = ' + JSON.stringify(credPatch) + ';' +
|
||||
' var BUCKET = TARGET.split("/")[2];' +
|
||||
' var seeded = false;' +
|
||||
' var broadcasts = 0;' +
|
||||
' var tries = 0;' +
|
||||
' var timer = setInterval(function () {' +
|
||||
' tries++;' +
|
||||
' if (tries > 80) { clearInterval(timer); return; }' +
|
||||
' try {' +
|
||||
' var ng = window.angular;' +
|
||||
' if (!ng) return;' +
|
||||
' var el = document.querySelector("[ng-app]") || document.documentElement;' +
|
||||
' var inj = ng.element(el).injector();' +
|
||||
' if (!inj) return;' +
|
||||
' if (!seeded) {' +
|
||||
' seeded = true;' +
|
||||
' var patch = { osspath: TARGET, address: TARGET, region: REGION };' +
|
||||
' if (CRED) { patch.id = CRED.id; patch.secret = CRED.secret; patch.eptpl = CRED.eptpl; }' +
|
||||
' inj.get("AuthInfo").saveToAuthInfo(patch);' +
|
||||
' var rs = inj.get("$rootScope");' +
|
||||
' rs.currentAuthInfo = rs.currentAuthInfo || {};' +
|
||||
' for (var k in patch) { rs.currentAuthInfo[k] = patch[k]; }' +
|
||||
' rs.internalSupported = false;' +
|
||||
' rs.bucketMap = rs.bucketMap || {};' +
|
||||
' rs.bucketMap[BUCKET] = { region: REGION };' +
|
||||
' }' +
|
||||
' if (broadcasts < 8) { broadcasts++; inj.get("$rootScope").$broadcast("goToOssAddress", TARGET); }' +
|
||||
' else { clearInterval(timer); }' +
|
||||
' } catch (e) {}' +
|
||||
' }, 500);' +
|
||||
'})();'
|
||||
|
||||
app.on('web-contents-created', function (event, contents) {
|
||||
contents.on('did-finish-load', function () {
|
||||
try { contents.executeJavaScript(injection) } catch (e) {}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 交接给官方 oss-browser 主进程逻辑
|
||||
try {
|
||||
require(path.join(__dirname, '..', 'app.asar', 'main.js'))
|
||||
} catch (e) {
|
||||
try {
|
||||
require('electron').dialog.showErrorBox(
|
||||
'oss-browser 包装层错误',
|
||||
String((e && e.message) || e) + '\n如需恢复原版,请删除 resources\\app 目录。'
|
||||
)
|
||||
} catch (e2) {}
|
||||
}
|
||||
@@ -2,9 +2,13 @@
|
||||
chcp 65001 >nul
|
||||
setlocal
|
||||
rem ==========================================
|
||||
rem oss-browser 一键拉起协议注册脚本
|
||||
rem oss-browser 一键注册脚本(协议拉起 + 启动自动定位补丁)
|
||||
rem 用法:把本文件放到与 oss-browser.exe 同一目录,双击运行
|
||||
rem 作用:在当前用户注册表(HKCU)注册 ossbrowser:// 协议,无需管理员权限
|
||||
rem 作用:
|
||||
rem 1. 在当前用户注册表(HKCU)注册 ossbrowser:// 协议,无需管理员权限
|
||||
rem 2. 安装 resources\app 包装层:启动时自动把默认 OSS 路径填进地址栏并定位(含正确 region)
|
||||
rem 3. 生成 trae_default_oss_path.txt(第1行 oss 路径,第2行可选 region)
|
||||
rem 卸载补丁:删除 resources\app 目录与 trae_default_oss_path.txt 即恢复原版
|
||||
rem ==========================================
|
||||
set "EXE=%~dp0oss-browser.exe"
|
||||
if not exist "%EXE%" (
|
||||
@@ -23,9 +27,92 @@ if errorlevel 1 (
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo [完成] 已注册 ossbrowser:// 协议。
|
||||
|
||||
rem ---- 安装启动自动定位包装层 ----
|
||||
if not exist "%~dp0resources\app" mkdir "%~dp0resources\app"
|
||||
echo {"name":"oss-browser","version":"1.18.0","main":"main.js"}> "%~dp0resources\app\package.json"
|
||||
if exist "%~dp0_wrapper.b64" del "%~dp0_wrapper.b64" >nul
|
||||
echo Ly8gVHJhZS1Ub29sYm94IG9zcy1icm93c2VyIOWMheijheWxgu+8iHJlc291cmNlcy9hcHAvbWFpbi5qc++8iQovLyDkvZzn>> "%~dp0_wrapper.b64"
|
||||
echo lKjvvJrlkK/liqjml7bor7vlj5YgZXhlIOWQjOebruW9lSB0cmFlX2RlZmF1bHRfb3NzX3BhdGgudHh077yI56ysMeihjCBv>> "%~dp0_wrapper.b64"
|
||||
echo c3Mg6Lev5b6E77yM56ysMuihjOWPr+mAiSByZWdpb27vvInvvIwKLy8gICAgICAg5bm25LuO5pys5py6IH4vVG9vbGJveF9s>> "%~dp0_wrapper.b64"
|
||||
echo b2NhbF9jcmVkcy5lbnYubG9jYWwg6K+75Y+WIERPQ19DTE9VRF9LRUVQRVJfT1NTXyog5Yet5o2u77yI6L+Q6KGM5pe26K+7>> "%~dp0_wrapper.b64"
|
||||
echo 5Y+W77yM6Zu256Gs57yW56CB77yJ77yMCi8vICAgICAgIOazqOWFpea4suafk+i/m+eoi++8muWGmeWFpSBBdXRoSW5mbyDl>> "%~dp0_wrapper.b64"
|
||||
echo ubbooaXkuIEgJHJvb3RTY29wZS5jdXJyZW50QXV0aEluZm8gLyBidWNrZXRNYXDvvIwKLy8gICAgICAg5L2/IG9zcy1icm93>> "%~dp0_wrapper.b64"
|
||||
echo c2VyIOavj+asoeWQr+WKqOWNs+S7peacieaViOi0puWPt+eZu+W9leOAgeWcsOWdgOagj+iHquWKqOWumuS9jeWIsOm7mOiu>> "%~dp0_wrapper.b64"
|
||||
echo pOebruW9le+8mwovLyAgICAgICDpmo/lkI7ljp/moLfkuqTmjqXnu5nlrpjmlrkgYXBwLmFzYXIg5YaF55qEIG1haW4uanPv>> "%~dp0_wrapper.b64"
|
||||
echo vIzkuI3mlLnliqjlrpjmlrnljIXku7vkvZXlrZfoioLjgIIKLy8g5Y246L2977ya5Yig6ZmkIHJlc291cmNlc1xhcHAg55uu>> "%~dp0_wrapper.b64"
|
||||
echo 5b2V5LiOIHRyYWVfZGVmYXVsdF9vc3NfcGF0aC50eHQg5Y2z5oGi5aSN5Y6f54mI44CCCmNvbnN0IHsgYXBwIH0gPSByZXF1>> "%~dp0_wrapper.b64"
|
||||
echo aXJlKCdlbGVjdHJvbicpCmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKQpjb25zdCBvcyA9IHJlcXVpcmUoJ29zJykKY29uc3Qg>> "%~dp0_wrapper.b64"
|
||||
echo cGF0aCA9IHJlcXVpcmUoJ3BhdGgnKQoKY29uc3QgcmVhZERlZmF1bHRDb25maWcgPSAoKSA9PiB7CiAgY29uc3QgY2ZnID0g>> "%~dp0_wrapper.b64"
|
||||
echo eyB0YXJnZXQ6ICcnLCByZWdpb246ICdvc3MtY24tc2hhbmdoYWknLCBpZDogJycsIHNlY3JldDogJycgfQogIHRyeSB7CiAg>> "%~dp0_wrapper.b64"
|
||||
echo ICBjb25zdCBwID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShwcm9jZXNzLmV4ZWNQYXRoKSwgJ3RyYWVfZGVmYXVsdF9vc3Nf>> "%~dp0_wrapper.b64"
|
||||
echo cGF0aC50eHQnKQogICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHsKICAgICAgY29uc3QgbGluZXMgPSBTdHJpbmcoZnMucmVh>> "%~dp0_wrapper.b64"
|
||||
echo ZEZpbGVTeW5jKHAsICd1dGY4JykpLnNwbGl0KC9ccj9cbi8pLm1hcChsID0+IGwudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikK>> "%~dp0_wrapper.b64"
|
||||
echo ICAgICAgaWYgKGxpbmVzWzBdICYmIGxpbmVzWzBdLmluZGV4T2YoJ29zczovLycpID09PSAwKSBjZmcudGFyZ2V0ID0gbGlu>> "%~dp0_wrapper.b64"
|
||||
echo ZXNbMF0KICAgICAgaWYgKGxpbmVzWzFdICYmIC9eb3NzLVthLXowLTktXSskLy50ZXN0KGxpbmVzWzFdKSkgY2ZnLnJlZ2lv>> "%~dp0_wrapper.b64"
|
||||
echo biA9IGxpbmVzWzFdCiAgICB9CiAgfSBjYXRjaCAoZSkge30KICB0cnkgewogICAgY29uc3QgcCA9IHBhdGguam9pbihvcy5o>> "%~dp0_wrapper.b64"
|
||||
echo b21lZGlyKCksICdUb29sYm94X2xvY2FsX2NyZWRzLmVudi5sb2NhbCcpCiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkgewog>> "%~dp0_wrapper.b64"
|
||||
echo ICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpKQogICAgICBmb3IgKGNvbnN0IGxp>> "%~dp0_wrapper.b64"
|
||||
echo bmUgb2YgdGV4dC5zcGxpdCgvXHI/XG4vKSkgewogICAgICAgIGNvbnN0IHQgPSBsaW5lLnRyaW0oKQogICAgICAgIGlmICgh>> "%~dp0_wrapper.b64"
|
||||
echo dCB8fCB0LnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWUKICAgICAgICBjb25zdCBlcSA9IHQuaW5kZXhPZignPScpCiAgICAg>> "%~dp0_wrapper.b64"
|
||||
echo ICAgaWYgKGVxIDw9IDApIGNvbnRpbnVlCiAgICAgICAgY29uc3QgayA9IHQuc2xpY2UoMCwgZXEpLnRyaW0oKQogICAgICAg>> "%~dp0_wrapper.b64"
|
||||
echo IGNvbnN0IHYgPSB0LnNsaWNlKGVxICsgMSkudHJpbSgpCiAgICAgICAgaWYgKGsgPT09ICdET0NfQ0xPVURfS0VFUEVSX09T>> "%~dp0_wrapper.b64"
|
||||
echo U19BQ0NFU1NfS0VZX0lEJykgY2ZnLmlkID0gdgogICAgICAgIGlmIChrID09PSAnRE9DX0NMT1VEX0tFRVBFUl9PU1NfQUND>> "%~dp0_wrapper.b64"
|
||||
echo RVNTX0tFWV9TRUNSRVQnKSBjZmcuc2VjcmV0ID0gdgogICAgICB9CiAgICB9CiAgfSBjYXRjaCAoZSkge30KICByZXR1cm4g>> "%~dp0_wrapper.b64"
|
||||
echo Y2ZnCn0KCmNvbnN0IENGRyA9IHJlYWREZWZhdWx0Q29uZmlnKCkKCmlmIChDRkcudGFyZ2V0KSB7CiAgY29uc3QgY3JlZFBh>> "%~dp0_wrapper.b64"
|
||||
echo dGNoID0gKENGRy5pZCAmJiBDRkcuc2VjcmV0KQogICAgPyB7IGlkOiBDRkcuaWQsIHNlY3JldDogQ0ZHLnNlY3JldCwgZXB0>> "%~dp0_wrapper.b64"
|
||||
echo cGw6ICdodHRwczovL3tyZWdpb259LmFsaXl1bmNzLmNvbScgfQogICAgOiBudWxsCiAgY29uc3QgaW5qZWN0aW9uID0KICAg>> "%~dp0_wrapper.b64"
|
||||
echo ICcoZnVuY3Rpb24gKCkgeycgKwogICAgJyAgdmFyIFRBUkdFVCA9ICcgKyBKU09OLnN0cmluZ2lmeShDRkcudGFyZ2V0KSAr>> "%~dp0_wrapper.b64"
|
||||
echo ICc7JyArCiAgICAnICB2YXIgUkVHSU9OID0gJyArIEpTT04uc3RyaW5naWZ5KENGRy5yZWdpb24pICsgJzsnICsKICAgICcg>> "%~dp0_wrapper.b64"
|
||||
echo IHZhciBDUkVEID0gJyArIEpTT04uc3RyaW5naWZ5KGNyZWRQYXRjaCkgKyAnOycgKwogICAgJyAgdmFyIEJVQ0tFVCA9IFRB>> "%~dp0_wrapper.b64"
|
||||
echo UkdFVC5zcGxpdCgiLyIpWzJdOycgKwogICAgJyAgdmFyIHNlZWRlZCA9IGZhbHNlOycgKwogICAgJyAgdmFyIGJyb2FkY2Fz>> "%~dp0_wrapper.b64"
|
||||
echo dHMgPSAwOycgKwogICAgJyAgdmFyIHRyaWVzID0gMDsnICsKICAgICcgIHZhciB0aW1lciA9IHNldEludGVydmFsKGZ1bmN0>> "%~dp0_wrapper.b64"
|
||||
echo aW9uICgpIHsnICsKICAgICcgICAgdHJpZXMrKzsnICsKICAgICcgICAgaWYgKHRyaWVzID4gODApIHsgY2xlYXJJbnRlcnZh>> "%~dp0_wrapper.b64"
|
||||
echo bCh0aW1lcik7IHJldHVybjsgfScgKwogICAgJyAgICB0cnkgeycgKwogICAgJyAgICAgIHZhciBuZyA9IHdpbmRvdy5hbmd1>> "%~dp0_wrapper.b64"
|
||||
echo bGFyOycgKwogICAgJyAgICAgIGlmICghbmcpIHJldHVybjsnICsKICAgICcgICAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVy>> "%~dp0_wrapper.b64"
|
||||
echo eVNlbGVjdG9yKCJbbmctYXBwXSIpIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsnICsKICAgICcgICAgICB2YXIgaW5q>> "%~dp0_wrapper.b64"
|
||||
echo ID0gbmcuZWxlbWVudChlbCkuaW5qZWN0b3IoKTsnICsKICAgICcgICAgICBpZiAoIWluaikgcmV0dXJuOycgKwogICAgJyAg>> "%~dp0_wrapper.b64"
|
||||
echo ICAgIGlmICghc2VlZGVkKSB7JyArCiAgICAnICAgICAgICBzZWVkZWQgPSB0cnVlOycgKwogICAgJyAgICAgICAgdmFyIHBh>> "%~dp0_wrapper.b64"
|
||||
echo dGNoID0geyBvc3NwYXRoOiBUQVJHRVQsIGFkZHJlc3M6IFRBUkdFVCwgcmVnaW9uOiBSRUdJT04gfTsnICsKICAgICcgICAg>> "%~dp0_wrapper.b64"
|
||||
echo ICAgIGlmIChDUkVEKSB7IHBhdGNoLmlkID0gQ1JFRC5pZDsgcGF0Y2guc2VjcmV0ID0gQ1JFRC5zZWNyZXQ7IHBhdGNoLmVw>> "%~dp0_wrapper.b64"
|
||||
echo dHBsID0gQ1JFRC5lcHRwbDsgfScgKwogICAgJyAgICAgICAgaW5qLmdldCgiQXV0aEluZm8iKS5zYXZlVG9BdXRoSW5mbyhw>> "%~dp0_wrapper.b64"
|
||||
echo YXRjaCk7JyArCiAgICAnICAgICAgICB2YXIgcnMgPSBpbmouZ2V0KCIkcm9vdFNjb3BlIik7JyArCiAgICAnICAgICAgICBy>> "%~dp0_wrapper.b64"
|
||||
echo cy5jdXJyZW50QXV0aEluZm8gPSBycy5jdXJyZW50QXV0aEluZm8gfHwge307JyArCiAgICAnICAgICAgICBmb3IgKHZhciBr>> "%~dp0_wrapper.b64"
|
||||
echo IGluIHBhdGNoKSB7IHJzLmN1cnJlbnRBdXRoSW5mb1trXSA9IHBhdGNoW2tdOyB9JyArCiAgICAnICAgICAgICBycy5pbnRl>> "%~dp0_wrapper.b64"
|
||||
echo cm5hbFN1cHBvcnRlZCA9IGZhbHNlOycgKwogICAgJyAgICAgICAgcnMuYnVja2V0TWFwID0gcnMuYnVja2V0TWFwIHx8IHt9>> "%~dp0_wrapper.b64"
|
||||
echo OycgKwogICAgJyAgICAgICAgcnMuYnVja2V0TWFwW0JVQ0tFVF0gPSB7IHJlZ2lvbjogUkVHSU9OIH07JyArCiAgICAnICAg>> "%~dp0_wrapper.b64"
|
||||
echo ICAgfScgKwogICAgJyAgICAgIGlmIChicm9hZGNhc3RzIDwgOCkgeyBicm9hZGNhc3RzKys7IGluai5nZXQoIiRyb290U2Nv>> "%~dp0_wrapper.b64"
|
||||
echo cGUiKS4kYnJvYWRjYXN0KCJnb1RvT3NzQWRkcmVzcyIsIFRBUkdFVCk7IH0nICsKICAgICcgICAgICBlbHNlIHsgY2xlYXJJ>> "%~dp0_wrapper.b64"
|
||||
echo bnRlcnZhbCh0aW1lcik7IH0nICsKICAgICcgICAgfSBjYXRjaCAoZSkge30nICsKICAgICcgIH0sIDUwMCk7JyArCiAgICAn>> "%~dp0_wrapper.b64"
|
||||
echo fSkoKTsnCgogIGFwcC5vbignd2ViLWNvbnRlbnRzLWNyZWF0ZWQnLCBmdW5jdGlvbiAoZXZlbnQsIGNvbnRlbnRzKSB7CiAg>> "%~dp0_wrapper.b64"
|
||||
echo ICBjb250ZW50cy5vbignZGlkLWZpbmlzaC1sb2FkJywgZnVuY3Rpb24gKCkgewogICAgICB0cnkgeyBjb250ZW50cy5leGVj>> "%~dp0_wrapper.b64"
|
||||
echo dXRlSmF2YVNjcmlwdChpbmplY3Rpb24pIH0gY2F0Y2ggKGUpIHt9CiAgICB9KQogIH0pCn0KCi8vIOS6pOaOpee7meWumOaW>> "%~dp0_wrapper.b64"
|
||||
echo uSBvc3MtYnJvd3NlciDkuLvov5vnqIvpgLvovpEKdHJ5IHsKICByZXF1aXJlKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLics>> "%~dp0_wrapper.b64"
|
||||
echo ICdhcHAuYXNhcicsICdtYWluLmpzJykpCn0gY2F0Y2ggKGUpIHsKICB0cnkgewogICAgcmVxdWlyZSgnZWxlY3Ryb24nKS5k>> "%~dp0_wrapper.b64"
|
||||
echo aWFsb2cuc2hvd0Vycm9yQm94KAogICAgICAnb3NzLWJyb3dzZXIg5YyF6KOF5bGC6ZSZ6K+vJywKICAgICAgU3RyaW5nKChl>> "%~dp0_wrapper.b64"
|
||||
echo ICYmIGUubWVzc2FnZSkgfHwgZSkgKyAnXG7lpoLpnIDmgaLlpI3ljp/niYjvvIzor7fliKDpmaQgcmVzb3VyY2VzXFxhcHAg>> "%~dp0_wrapper.b64"
|
||||
echo 55uu5b2V44CCJwogICAgKQogIH0gY2F0Y2ggKGUyKSB7fQp9Cg==>> "%~dp0_wrapper.b64"
|
||||
if exist "%~dp0resources\app\main.js" del "%~dp0resources\app\main.js" >nul
|
||||
certutil -decode "%~dp0_wrapper.b64" "%~dp0resources\app\main.js" >nul
|
||||
if errorlevel 1 (
|
||||
echo [警告] 包装层解码失败,跳过自动定位补丁(协议拉起仍可用)。
|
||||
) else (
|
||||
echo [完成] 已安装启动自动定位包装层(resources\app)。
|
||||
)
|
||||
del "%~dp0_wrapper.b64" >nul
|
||||
|
||||
rem ---- 默认路径配置(已存在则不覆盖,尊重手动修改) ----
|
||||
if not exist "%~dp0trae_default_oss_path.txt" (
|
||||
echo oss://android-o1-images/trae-files-temp/> "%~dp0trae_default_oss_path.txt"
|
||||
echo oss-cn-shanghai>> "%~dp0trae_default_oss_path.txt"
|
||||
echo [完成] 已生成默认路径配置 trae_default_oss_path.txt
|
||||
)
|
||||
|
||||
echo.
|
||||
echo [完成] 已注册 ossbrowser:// 协议,指向:
|
||||
echo %EXE%
|
||||
echo 现在可回到网页点击「打开 oss-browser」。首次拉起时浏览器会弹确认框,勾选“始终允许”后即为无感打开。
|
||||
echo 现在可回到网页点击「打开 oss-browser」。
|
||||
echo 首次拉起时浏览器会弹确认框,勾选“始终允许”后即为无感打开。
|
||||
echo 启动后地址栏会自动定位到 trae_default_oss_path.txt 中的路径。
|
||||
echo 该文件第1行为 oss 路径,第2行可选 region(默认 oss-cn-shanghai)。
|
||||
echo.
|
||||
pause
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<section id="obl-actions">
|
||||
<button id="obl-download-btn" class="obl-btn primary">⬇ 下载 oss-browser 安装包</button>
|
||||
<button id="obl-launch-btn" class="obl-btn green">🚀 打开 oss-browser</button>
|
||||
<button id="obl-reg-btn" class="obl-btn ghost">📄 下载一键注册脚本(首次)</button>
|
||||
<button id="obl-reg-btn" class="obl-btn ghost">📄 下载一键注册脚本(首次,含自动定位补丁)</button>
|
||||
</section>
|
||||
|
||||
<section id="obl-steps">
|
||||
@@ -39,12 +39,12 @@
|
||||
<li><b>下载</b>:点击上方「下载」获取安装包(直链本身受 Toolbox 鉴权保护,未授权无法下载)。</li>
|
||||
<li><b>解压</b>:将 zip 解压到一个固定目录(如 <code>D:\oss-browser</code>)。</li>
|
||||
<li><b>注册协议(仅首次)</b>:下载「一键注册脚本」,放入解压目录(与 oss-browser.exe 同级),双击运行。脚本会在当前用户注册表注册 <code>ossbrowser://</code> 协议,无需管理员权限。</li>
|
||||
<li><b>启动自动定位 + 免登录</b>:注册脚本同时安装包装层补丁,之后每次启动 oss-browser 会自动以本机 Toolbox 配置的 OSS 账号登录,地址栏自动填入并定位到默认路径,无需手动输入。</li>
|
||||
<li><b>改默认路径</b>:编辑解压目录下的 <code>trae_default_oss_path.txt</code>(第1行 oss:// 路径,第2行可选 region,默认 oss-cn-shanghai)。</li>
|
||||
<li><b>升级过旧版脚本的</b>:请重新下载本注册脚本并再次双击运行(会覆盖包装层),否则自动定位可能因缺少 region 而报 403。</li>
|
||||
<li><b>卸载补丁</b>:删除 <code>resources\app</code> 目录与 <code>trae_default_oss_path.txt</code> 即恢复原版。</li>
|
||||
<li><b>一键打开</b>:以后点击「打开 oss-browser」即可直接拉起本地程序(浏览器首次会弹确认框,勾选"始终允许"后不再打扰)。</li>
|
||||
<li>若检测到未安装,会自动回退为下载安装包。</li>
|
||||
|
||||
<li>阿里OSS直链中转。DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_ID是LTAI5t9fraTXxm-dafe-TwE31Ph2ne</li>
|
||||
<li>DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_SECRET是LBN3ntJfdwlnmCiA9QCed-dafe-Y7XlhxpvX</li>
|
||||
<li>路径是oss://android-o1-images/trae-dafe-files-temp/</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -893,8 +893,16 @@ const getStringFromItem = (item, timeoutMs) => new Promise((resolve) => {
|
||||
}
|
||||
})
|
||||
|
||||
const isEditableTarget = (el) => {
|
||||
if (!el || el.nodeType !== 1) return false
|
||||
const tag = String(el.tagName || '').toUpperCase()
|
||||
return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || !!el.isContentEditable
|
||||
}
|
||||
|
||||
const handlePaste = async (event) => {
|
||||
if (!isQuickEntryMode()) return
|
||||
// 焦点在输入框/文本域内时,交还给浏览器默认粘贴,不做全局捕获
|
||||
if (isEditableTarget(event.target) || isEditableTarget(document.activeElement)) return
|
||||
const data = event.clipboardData
|
||||
if (!data) return
|
||||
const items = Array.from(data.items || [])
|
||||
|
||||
Reference in New Issue
Block a user