🧭 「代码交流」使用指南


一、游玩者指南

1.1 什么是「代码交流」?

这是一个围绕 Realm 平台的客户端组件HTML 组件的学习与交流社区。你可以在这里浏览开发者们发布的组件作品,也可以亲自尝试编写和发布自己的组件。

1.2 浏览发布内容

进入不同的发布页面浏览不同的排序方式和组件类型。

1.3 点赞互动

在「发现」分组的各类页面中,你可以对喜欢的作品点赞。点赞数据按日期存储,每天独立统计。

1.4 参与交流

在「社区」分组下的「交流」页面,你可以:
  • 发布动态,与其他开发者讨论
  • 回复他人的帖子
  • 分享你的经验和疑问

1.5 小提示

  • 页面左侧的侧边栏可以快速切换各个页面
  • 带"发现"标签的分组里每天都有新内容
  • 多关注时间显示和点赞排行,看看大家都在做什么

二、客户端组件开发者指南

2.1 什么是客户端组件?

客户端组件是在玩家浏览器中运行的组件,使用 组件.新组件() API 动态创建 UI。它不能直接访问服务器数据(属性、物品、数据库),但可以通过对外接口函数通道与服务器通信。而本领域封装了对外接口函数,使得在前端也可以使用旧写法await 数据.读([<路径>])await 数据.写([<路径>], <值>)来操作各页面相互独立的数据库。

2.2 快速开始

进入「发布」分组下的「提交组件」页面:
  1. 填写标题和介绍
  2. 在代码框中输入你的组件代码
  3. 点击「发布」
发布后,其他玩家可以通过「发现」分组看到你的作品。

2.3 核心 API

创建组件

const 文本 = 组件.新组件('文本');
文本.内容 = "你好,世界!";
文本.样式.字体.大小 = 20;

const 按钮 = 组件.新组件('按钮');
按钮.当点击时(() => {
  提示('被点击了!');
});
可用类型:'块''文本''按钮''链接''图片''文本输入框''图标''富文本'

通信

方式一:使用内置的数据封装
在客户端内置了 数据.读 、 数据.写 和数据.删除的封装,用法:
const 结果 = await 数据.(['你的', '数据', '路径']); // 一定要加上await
await 数据.(['你的', '数据', '路径'],); // 不能写入undefined
await 数据.删除(['删除的', '数据', '路径']);
方式二:通道实时通信
通道('通道名').当收到信息时((数据) => {
  // 处理收到的数据
});
通道('通道名').发送(任何值);

2.4 注意事项

  • 不能直接访问 属性.xxx物品.xxx数据.读 等服务器端 API
  • 所有数据交互必须通过对外接口函数和通道
  • 代码和参数都会被用户查看,不要存放敏感信息
  • 组件参数更新时会刷新整个组件(沙箱重置),注意状态保持

三、HTML 组件开发者指南

3.1 什么是 HTML 组件?

HTML 组件使用完整的 HTML/CSS/JavaScript 编写,在沙箱中运行。与客户端组件相比:
  • ✅ 可以完全控制 DOM(documentwindow 可直接使用)
  • ✅ 可以引入外部 CSS/CDN 库
  • ✅ 适合复杂动画、Canvas/WebGL 效果
  • 同样需要通过对外接口函数和通道与服务器通信

3.2 快速开始

进入「发布」分组下的「提交HTML」页面:
  1. 填写标题和介绍
  2. 在代码框中输入你的 HTML 代码(只需填写 <head><body> 之间的内容,系统会自动包裹 <!DOCTYPE html><html> 标签)
  3. 点击「发布」

3.3 标准模板

<div id="app">
  <h2 id="title">加载中...</h2>
  <button onclick="handleClick()">点击</button>
</div>

<script>
// 组件参数作为全局变量可直接使用
function handleClick() {
  玩家.提示('按钮被点击了!');
  await 数据.(['是否点击'], true);
}

// 通过通道接收实时更新
通道('更新通道').当收到信息时((数据) => {
  document.getElementById('title').textContent = 数据.内容;
});
</script>

<style>
  #app { padding: 20px; font-family: sans-serif; }
  button { background: #3b82f6; color: white; border: none; 
           padding: 10px 20px; border-radius: 6px; cursor: pointer; }
</style>

3.4 操作数据库

此处的用法与客户端脚本组件相同。

3.5 注意事项

  • HTML 组件高度固定,如有需要请使用 height: 100% + 绝对定位撑满页面
  • iframe 沙箱环境中没有 localStoragecookie 等浏览器 API
  • 通过对外接口函数通信时,函数不能有返回值(只能通过通道返回)
  • 组件参数变化会重建整个 iframe,所有状态丢失
  • 避免在 HTML 中直接使用 evalnew Function 执行不可信代码

四、常见问题

Q: 如何查看我发布过的代码?

A: 进入「提交组件」或「提交HTML」页面,系统会自动加载你上次发布的内容。

Q: 点赞数据什么时候重置?

A: 点赞数据按日期存储,每天独立计算。

Q: 客户端组件和 HTML 组件有什么区别?

A: 客户端组件使用 组件.新组件() API 构建 UI,运行在 Wasm 沙箱中,适合简单的结构化界面;HTML 组件运行在 iframe 中,能导入外部CDN库,可以完全控制 DOM,适合复杂视觉效果。
更多信息,敬请参考