Skip to content

制作卡片组件

TIP

此功能需要一定 JavaScript 开发知识,并且有一定的不稳定性。

请勿轻易使用其他人的脚本,这可能会导致你的面板被入侵。

开启 MCSManager 网页界面的设计后,新增卡片时有一个 扩展页面卡片,这个卡片支持你上传自己的 HTML 文件,并且直接运行在前端网页环境中,这和 内嵌网页卡片 有着本质上的区别,因为你可以访问到绝大部分前端 HTML 节点,以及操作 MCSManager 给予你的 API。

html
<!DOCTYPE html>
<html>
  <body>
    <div>
      <h1>Hello World</h1>
      <button id="myButton">Button</button>
      <!-- 不要在 HTML 使用 JavaScript 中的函数 -->
      <!-- <button id="myButton" onClick="handleClick()">Button</button> -->
    </div>
    <script>
      function handleClick() {
        console.debug("Button click!");
      }

      // 卡片挂载事件
      window.$onMounted = function () {
        console.debug("HTML Mounted");

        // 如果你要对 HTML 进行交互,请这样写
        document.querySelector("#myButton").addEventListener("click");
      };

      // 卡片卸载事件
      window.$onUnmounted = function () {
        console.debug("HTML Unmounted");
      };
    </script>
  </body>
</html>

JavaScript 沙盒机制

为了防止多个卡片载入到同一个页面互相干扰,MCSManager 制作了一个简易的 JavaScript 沙盒机制,它的工作原理就是代理 window 对象,你对 window 对象的所有更改都不会影响到其他人。

HTML 卡片 1

js
window.$onMounted = function () {
  window.name = "foo"; // 定义全局变量
};

HTML 卡片 2

js
window.$onMounted = function () {
  setTimeout(() => {
    console.log(window.name); // undefined
  }, 10000);
};

CSS 样式污染

MCSManager 并没有对 CSS 样式进行隔离,需要你自己或者其他开发者自己约束 CSS 样式,你对 CSS 样式的任何定义都会影响 MCSManager 整个网页。

卡片 API

我们为你提供了几个 API 供你在脚本中使用。

js
window.$onMounted = function () {
  // 卡片加载完毕事件。
};
window.$onUnmounted = function () {
  // 卡片卸载完毕事件。
};

// 真实 window 对象,即 MCSManager 网页前端的 window 对象。
window.$realWindow;

// Axios 库,可用于发送请求。
// 使用方法参考:https://axios-http.com/docs/example
window.$axios;

// 当前 MCSManager 界面主题,浅色或深色(light/dark)。
window.$theme;