| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
- <title>演示游戏内嵌页</title>
- <!-- Tailwind for quick styling inside iframe -->
- <script src="https://cdn.tailwindcss.com"></script>
- <!-- Import SDK -->
- <script src="/game-sdk.js"></script>
- <style>
- body {
- background-color: #f8fafc;
- font-family: system-ui, -apple-system, sans-serif;
- }
- </style>
- </head>
- <body class="p-4 flex flex-col min-h-screen">
-
- <div class="text-center mb-8 mt-4">
- <div class="inline-block p-3 rounded-full bg-indigo-100 text-indigo-600 mb-3">
- <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="6" width="20" height="12" rx="2"/><path d="M6 12h4"/><path d="M8 10v4"/><path d="M15 13h.01"/><path d="M18 11h.01"/></svg>
- </div>
- <h1 class="text-2xl font-bold text-slate-800">异界修仙传 H5</h1>
- <p class="text-slate-500 text-sm mt-1">游戏客户端 (Iframe内)</p>
- </div>
- <div class="space-y-4 flex-1">
-
- <!-- 初始化模块 -->
- <div class="bg-white p-5 rounded-2xl shadow-sm border border-slate-100">
- <div class="flex justify-between items-center mb-3">
- <h2 class="font-semibold text-slate-700">1. 初始化模块</h2>
- </div>
- <button id="btn-init" class="w-full py-3 bg-blue-600 hover:bg-blue-700 text-white rounded-xl font-medium transition-colors shadow-sm shadow-blue-200 active:scale-95 duration-150">
- 调用 SDK 初始化
- </button>
- <div id="init-res" class="mt-3 text-xs text-slate-600 bg-slate-50 p-2 rounded hidden break-all"></div>
- </div>
- <!-- 登录模块 -->
- <div class="bg-white p-5 rounded-2xl shadow-sm border border-slate-100">
- <div class="flex justify-between items-center mb-3">
- <h2 class="font-semibold text-slate-700">2. 登录模块</h2>
- <span id="login-status" class="text-xs px-2 py-1 rounded-full bg-slate-100 text-slate-500">未登录</span>
- </div>
- <button id="btn-login" class="w-full py-3 bg-blue-600 hover:bg-blue-700 text-white rounded-xl font-medium transition-colors shadow-sm shadow-blue-200 active:scale-95 duration-150">
- 调用 SDK 登录
- </button>
- <div id="login-res" class="mt-3 text-xs text-slate-600 bg-slate-50 p-2 rounded hidden break-all"></div>
- </div>
- <!-- 支付模块 -->
- <div class="bg-white p-5 rounded-2xl shadow-sm border border-slate-100">
- <div class="flex justify-between items-center mb-3">
- <h2 class="font-semibold text-slate-700">3. 支付模块</h2>
- </div>
- <button id="btn-pay" class="w-full py-3 bg-emerald-500 hover:bg-emerald-600 text-white rounded-xl font-medium transition-colors shadow-sm shadow-emerald-200 active:scale-95 duration-150">
- 购买「绝世神兵」(¥99)
- </button>
- <div id="pay-res" class="mt-3 text-xs text-slate-600 bg-slate-50 p-2 rounded hidden break-all"></div>
- </div>
- <!-- 数据上报模块 -->
- <div class="bg-white p-5 rounded-2xl shadow-sm border border-slate-100">
- <div class="flex justify-between items-center mb-3">
- <h2 class="font-semibold text-slate-700">4. 数据上报</h2>
- </div>
- <button id="btn-report" class="w-full py-3 bg-purple-500 hover:bg-purple-600 text-white rounded-xl font-medium transition-colors shadow-sm shadow-purple-200 active:scale-95 duration-150">
- 上报「角色升级」事件
- </button>
- <div id="report-res" class="mt-3 text-xs text-slate-600 bg-slate-50 p-2 rounded hidden break-all"></div>
- </div>
- </div>
- <script>
- // 绑定事件到 GameSDK
- document.addEventListener('DOMContentLoaded', () => {
-
- const setLog = (id, result, isError = false) => {
- const el = document.getElementById(id);
- el.classList.remove('hidden');
- el.className = `mt-3 text-xs p-3 rounded break-all border ${isError ? 'bg-red-50 text-red-600 border-red-100' : 'bg-emerald-50 text-emerald-700 border-emerald-100'}`;
- el.textContent = typeof result === 'object' ? JSON.stringify(result, null, 2) : result;
- };
- // 1. 初始化
- document.getElementById('btn-init').addEventListener('click', async () => {
- const btn = document.getElementById('btn-init');
- btn.disabled = true;
- btn.innerHTML = '初始化中...';
-
- try {
- // 调用全局注入的 GameSDK,返回 Promise 并等待
- const result = await GameSDK.init({app_version:'1.0.0'});
-
- setLog('init-res', result);
- btn.innerHTML = '初始化成功';
- btn.className = 'w-full py-3 bg-emerald-600 hover:bg-emerald-700 text-white rounded-xl font-medium transition-colors shadow-sm shadow-emerald-200 active:scale-95 duration-150';
- } catch (error) {
- setLog('init-res', error.message, true);
- btn.disabled = false;
- btn.innerHTML = '调用 SDK 初始化';
- }
- });
- // 2. 登录
- document.getElementById('btn-login').addEventListener('click', async () => {
- const btn = document.getElementById('btn-login');
- const status = document.getElementById('login-status');
- btn.disabled = true;
- btn.innerHTML = '登录中...';
-
- try {
- // 调用全局注入的 GameSDK,返回 Promise 并等待
- const result = await GameSDK.login();
-
- setLog('login-res', result);
- status.textContent = '已登录';
- status.className = 'text-xs px-2 py-1 rounded-full bg-emerald-100 text-emerald-600 font-medium';
- btn.innerHTML = `你好, ${result.username}`;
- btn.className = 'w-full py-3 bg-slate-100 text-slate-400 rounded-xl font-medium';
- } catch (error) {
- setLog('login-res', error.message, true);
- btn.disabled = false;
- btn.innerHTML = '调用 SDK 登录';
- }
- });
- // 2. 支付
- document.getElementById('btn-pay').addEventListener('click', async () => {
- const btn = document.getElementById('btn-pay');
- const originalText = btn.innerHTML;
- btn.disabled = true;
- btn.innerHTML = '支付中...';
-
- try {
- const result = await GameSDK.pay({
- cp_order_id:String(new Date().getTime()/1000),
- server_id:'1',
- server_name: '服务器1',
- role_id:'1000001',
- role_name:'角色1',
- money:'1', // 元
- product_id:'1',
- product_name:'商品1',
- ext:'11111111'
- });
-
- setLog('pay-res', result);
- } catch (error) {
- setLog('pay-res', error.message, true);
- } finally {
- btn.disabled = false;
- btn.innerHTML = originalText;
- }
- });
- // 3. 上报
- document.getElementById('btn-report').addEventListener('click', async () => {
- const btn = document.getElementById('btn-report');
- const originalText = btn.innerHTML;
- btn.disabled = true;
- btn.innerHTML = '上报中...';
-
- try {
- const result = await GameSDK.report({
- data_type: '1',
- server_id: '1',
- server_name: '服务器1',
- role_id: '1000001',
- role_name: '角色1',
- role_level: '1'
- });
-
- setLog('report-res', result);
- } catch (error) {
- setLog('report-res', error.message, true);
- } finally {
- btn.disabled = false;
- btn.innerHTML = originalText;
- }
- });
- });
- </script>
- </body>
- </html>
|