快速上手
LG-SDK Base 为第三方平台提供了一组基础方法进行集成,实现 OTC 报价和交易功能。
准备工作
在开始使用 LG-SDK Base 之前,您需要完成以下准备工作:
在线演示
这个 CodeSandbox 演示 将帮助你快速上手 LG-SDK Base。
我们使用 Vue 搭建了它,因为它写起来很爽!但请别误会,legend-base 本身完全不依赖 Vue,你在 React、SolidJS 或者原生的项目中都能无缝使用它。
🔥 关键一步:关于 Signature
为方便体验,Demo 中已预置了一个测试 Signature。请注意,此 Signature 仅用于本地开发和测试,严禁用于生产环境。 在实际项目开发中,请务必替换为您自己申请的正式 Signature。
准备好了吗?让我们开始吧!
⚠️ 为了进步了解 LG-SDK Base里包含的方法,我们同时提供补充 demo 示例地址。
安装与引入
方式一:直接通过 <script> 标签引入
<script> 标签引入这是最简单直接的引入方式。只需在您的 HTML 文件中添加以下 script 标签,即可将 SDK 载入页面。
<script
defer
src="https://content.legendtrading.com/jssdk-base/legend-base.umd.js"
></script>说明:
- 使用 defer 属性确保脚本不会阻塞页面解析。
- 引入后,SDK 的相关模块(如 LegendLoader)将作为全局变量可用。
方式二:支持 SRI (Subresource Integrity) 的引入方式
为了增强安全性,我们推荐使用 SRI 功能来验证资源完整性。以下是完整的实现流程:
第一步:获取 manifest 文件
首先需要加载 manifest.json 文件来获取最新版本的文件哈希值:
// 获取 manifest 文件
async function loadManifest() {
try {
const response = await fetch('https://content.legendtrading.com/jssdk-base/manifest.json');
const manifest = await response.json();
return manifest;
} catch (error) {
console.error('Failed to load manifest:', error);
throw error;
}
}
// 使用示例
const manifest = await loadManifest();
console.log(manifest);manifest.json 响应示例:
{
"legend-base.js": {
"src": "legend-base.umd.js",
"integrity": "sha256-F22hxP76AHEwkpxmptmt54hbQnl9qr1An8Z5S6yVstQ= sha384-KUxf1uYQZB1mInlWQ/3Jv8bHRz/lPqw7lSkRpdvCu0M/YC2azLAX0R6huNabQ6+b sha512-XjP9y1N/v5wgJ1nOsO4PSyZoKC7kvmzmoUSVKt5NuX/EDutFgtqSSdtDNVGBJKtGHbt6EYe6IYZRf2azWM2C+A=="
},
...// 其他内容
}第二步:动态创建带有 SRI 的 Script 标签
// 动态加载带有 SRI 的 SDK
async function loadSDKWithSRI() {
try {
// 1. 加载 manifest
const manifest = await loadManifest();
// 2. 获取 legend-base.js 的配置
const baseConfig = manifest['legend-base.js'];
// 3. 创建 script 标签
const script = document.createElement('script');
script.src = `https://content.legendtrading.com/jssdk-base/${baseConfig.src}`;
script.integrity = baseConfig.integrity;
script.crossOrigin = 'anonymous';
script.async = true;
// 4. 设置加载完成回调
script.onload = () => {
console.log('SDK loaded successfully with SRI verification');
};
script.onerror = () => {
console.error('Failed to load SDK: SRI verification failed');
};
// 5. 添加到页面
document.head.appendChild(script);
} catch (error) {
console.error('Failed to load SDK with SRI:', error);
}
}
// 执行加载
loadSDKWithSRI();第三步:完整的 HTML 实现
<!DOCTYPE html>
<html>
<head>
<title>Legend Trading SDK</title>
<!-- 预加载 manifest -->
<link rel="preload" href="https://content.legendtrading.com/jssdk-base/manifest.json" as="fetch" crossorigin>
</head>
<body>
<div id="app"></div>
<script>
// 动态加载 SDK
async function initializeSDK() {
try {
// 加载 manifest
const response = await fetch('https://content.legendtrading.com/jssdk-base/manifest.json');
const manifest = await response.json();
// 创建 script 标签
const script = document.createElement('script');
const baseConfig = manifest['legend-base.js'];
script.src = `https://content.legendtrading.com/jssdk-base/${baseConfig.src}`;
script.integrity = baseConfig.integrity;
script.crossOrigin = 'anonymous';
script.defer = true;
// 添加到页面
document.head.appendChild(script);
console.log('SDK loading with SRI...');
} catch (error) {
console.error('Failed to initialize SDK:', error);
}
}
// 页面加载完成后初始化
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initializeSDK);
} else {
initializeSDK();
}
</script>
</body>
</html>方式三:通过 AMD 模块加载器(如 RequireJS)引入
SDK 支持在 AMD 环境中使用,以下是在 RequireJS 中的配置方法:
基本使用示例
在您的 AMD 模块中,可以直接 require SDK。
requirejs.config({
paths: {
LegendLoader: "https://content.legendtrading.com/jssdk-base/legend-base.umd"
}
});
// 使用 SDK
requirejs(["LegendLoader"], function(loader) {
console.log("SDK 加载完成:", loader);
});集成到应用
requirejs.config({
baseUrl: "lib",
paths: {
app: "../app",
LegendLoader: "https://content.legendtrading.com/jssdk-base/legend-base.umd"
}
});
requirejs(["app/main", "LegendLoader"], function(main, loader) {
// 应用和 SDK 都已就绪
console.log("应用启动完成", loader);
});安全配置(可选)
在要求严格的生产环境中,您可以通过 RequireJS 的 onNodeCreated 钩子为脚本添加 完整性校验 和 跨域属性,以增强安全性。
requirejs.config({
// ... 其他配置 ...
config: {
// 为所有脚本节点配置
nodeCreated: function (node, config, module, path) {
// 请将 'YOUR_INTEGRITY_VALUE' 替换为实际的SRI哈希值
node.setAttribute("integrity", "YOUR_INTEGRITY_VALUE");
node.setAttribute("crossorigin", "anonymous");
},
},
});Updated 5 months ago
