/* 演示插件的前端逻辑:全部能力都走宿主注入的 window.svfs(Promise)。 */ "use strict"; var $ = function (id) { return document.getElementById(id); }; var PLUGIN_VERSION = "1.0.0"; function randomColor() { var letters = "0123456789abcdef", out = "#"; for (var i = 0; i < 6; i++) out += letters[Math.floor(Math.random() * 16)]; return out; } async function main() { if (!window.svfsReady) { $("missing").hidden = false; $("version").textContent = "插件 " + PLUGIN_VERSION + "(未连接宿主)"; return; } var svfs = await window.svfsReady; var info = await svfs.host.info(); $("version").textContent = "插件 " + PLUGIN_VERSION + " · 桥 API v" + info.apiVersion; $("host-info").innerHTML = ""; [["插件 id", info.pluginId], ["宿主", info.appName + " " + info.appVersion], ["平台", info.platform], ["来源", info.source || "-"]] .forEach(function (row) { var dt = document.createElement("dt"); dt.textContent = row[0]; var dd = document.createElement("dd"); dd.textContent = row[1]; $("host-info").append(dt, dd); }); // storage:按插件隔离的键值存储,换一台机器/重装插件也不会串到别的插件 var count = 0; try { count = parseInt(await svfs.storage.get("visits"), 10) || 0; count += 1; await svfs.storage.set("visits", count); } catch (e) { /* 没拿到 storage 权限时静默降级 */ } $("count").textContent = String(count); $("reset").onclick = async function () { await svfs.storage.set("visits", 0); $("count").textContent = "0"; svfs.ui.notify("计数已清零"); }; $("add10").onclick = async function () { count += 10; await svfs.storage.set("visits", count); $("count").textContent = String(count); }; $("notify").onclick = function () { svfs.ui.notify("来自 " + info.pluginId + " 的通知(" + PLUGIN_VERSION + ")"); }; $("paint").onclick = function () { svfs.ui.setTitle("SVFS Client · 演示插件 " + randomColor()); }; $("changelog").textContent = "初始版本"; } main();