128 lines
7.1 KiB
HTML
128 lines
7.1 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8"/>
|
||
<!-- 百度站长HTML标签验证 -->
|
||
<meta name="baidu-site-verification" content="codeva-NoSMtV313P" />
|
||
|
||
<title>Type Words 官网 - 词文记 | 单词跟打 · 文章跟打</title>
|
||
<!-- 搜索引擎描述 -->
|
||
<meta name="description"
|
||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||
<!-- 关键词(可选,搜索引擎基本不用,但能补充信息) -->
|
||
<meta name="keywords"
|
||
content="Type Words, Typing Word, Type Words 官网, 官方网站, 英语打字练习, 单词跟打, 文章跟打, 键盘练习, 英语学习, 文章学习, 打字练习软件, 单词记忆工具, 英语学习软件, 背单词神器, 英语肌肉记忆, 键盘工作者, 免费英语学习, 音标发音, 默写练习, 在线学英语, CET-4, CET-6, TOEFL, IELTS, GRE, GMAT, SAT, 考研英语, 专四专八, 程序员英语, JavaScript API, Node.js API, Java API, Linux命令, 编程词汇, 技术英语, VSCode插件, 开源项目, GitHub趋势榜, V2EX热搜, Gitee GVP, 少数派推荐, 英语打字训练, WPM统计, 准确率分析, 商务英语, BEC, 雅思听力, 日语学习, 多语言学习, 英语口语练习, 单词拼写训练">
|
||
|
||
<meta name="author" content="zyronon"/>
|
||
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"/>
|
||
<link rel="canonical" href="https://typewords.cc/"/>
|
||
|
||
<!-- Open Graph(用于社交媒体分享,微信/QQ/知乎/Facebook 等) -->
|
||
<meta property="og:title" content="Type Words 官网 - 英语打字练习平台">
|
||
<meta property="og:description"
|
||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="https://typewords.cc/">
|
||
<meta property="og:image" content="https://typewords.cc/favicon.png">
|
||
|
||
<!-- Twitter Card(用于 Twitter 分享) -->
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:title" content="Type Words 官网 - 英语打字练习平台">
|
||
<meta name="twitter:description"
|
||
content="Type Words 官方网站 - 在线英语练习平台,支持单词、文章跟打练习,提升英语学习效率。Practice English, one strike, one step forward">
|
||
<meta name="twitter:image" content="https://typewords.cc/favicon.png">
|
||
|
||
<link rel="icon" type="image/svg+xml" href="/favicon.png"/>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||
<!-- 苹果设备(iOS Safari)在用户添加到主屏时显示的图标-->
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon.png"/>
|
||
<!-- 设置浏览器地址栏颜色(在 Android Chrome 特别明显)。-->
|
||
<meta name="theme-color" content="#818CF8"/>
|
||
<link rel="manifest" href="/manifest.json">
|
||
|
||
<!-- 阻止 iOS 自动把数字识别为电话号码。-->
|
||
<!-- HandheldFriendly 和 MobileOptimized 是旧手机浏览器的优化提示(现在作用不大)。-->
|
||
<meta name="format-detection" content="telephone=no"/>
|
||
<meta name="HandheldFriendly" content="True"/>
|
||
<meta name="MobileOptimized" content="320"/>
|
||
|
||
<!-- referrer 控制请求来源信息-->
|
||
<meta name="referrer" content="origin-when-cross-origin"/>
|
||
<!-- color-scheme 告诉浏览器支持亮/暗模式-->
|
||
<meta name="color-scheme" content="light dark"/>
|
||
|
||
<script>
|
||
if (!location.href.includes('localhost')
|
||
&& !location.href.includes('192.168')
|
||
&& !location.href.includes('172.16')
|
||
&& !location.href.includes('10.0')
|
||
) {
|
||
var _hmt = _hmt || [];
|
||
(function () {
|
||
var hm = document.createElement("script");
|
||
hm.src = "https://hm.baidu.com/hm.js?3dae52fcd5375a19905462e4ad3eb54e";
|
||
var s = document.getElementsByTagName("script")[0];
|
||
s.parentNode.insertBefore(hm, s);
|
||
})();
|
||
|
||
(function () {
|
||
var umami2 = document.createElement("script");
|
||
umami2.src = 'https://stat.typewords.cc/script.js'
|
||
umami2.setAttribute("data-website-id", "4d728ae3-5393-4efe-81dc-30dcb4f33c00");
|
||
var s = document.getElementsByTagName("script")[0];
|
||
s.parentNode.insertBefore(umami2, s);
|
||
})();
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<noscript>
|
||
<div>You need to enable JavaScript to run Type Words.</div>
|
||
<div>你需要启用 JavaScript 来运行 Type Words.</div>
|
||
</noscript>
|
||
<div id="app"></div>
|
||
<script>
|
||
(function(){
|
||
var ua = navigator.userAgent || ''
|
||
var isIE = !!document.documentMode || /MSIE|Trident/i.test(ua)
|
||
if (!isIE) return
|
||
var style = document.createElement('style')
|
||
style.type = 'text/css'
|
||
style.appendChild(document.createTextNode(
|
||
'.ie-mask{position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0,0,0,.35);z-index:9998}'+
|
||
'.ie-dialog{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:28rem;max-width:90vw;background:#fff;color:#111;border-radius:.6rem;box-shadow:0 10px 30px rgba(0,0,0,.15);z-index:9999;padding:1.2rem}'+
|
||
'.ie-dialog .title{font-size:1.2rem;font-weight:700;margin-bottom:.6rem}'+
|
||
'.ie-dialog .desc{font-size:.95rem;line-height:1.6;color:#555}'+
|
||
'.ie-dialog .actions{display:flex;justify-content:flex-end;margin-top:1rem}'+
|
||
'.ie-dialog .actions > * + *{margin-left:.6rem}'+
|
||
'.ie-dialog .btn{display:inline-flex;align-items:center;justify-content:center;height:2.2rem;padding:0 1rem;border-radius:.4rem;background:#0C8CE9;color:#fff;text-decoration:none}'+
|
||
'.ie-dialog .btn-secondary{display:inline-flex;align-items:center;justify-content:center;height:2.2rem;padding:0 .9rem;border-radius:.4rem;background:#eee;color:#333;border:1px solid #ddd}'+
|
||
'@media (prefers-color-scheme: dark){.ie-dialog{background:#1e1f22;color:#e6e6e6}.ie-dialog .desc{color:#c6c6c6}.ie-dialog .btn-secondary{background:#2a2b2f;color:#e6e6e6;border-color:#3a3b3f}}'
|
||
))
|
||
document.head.appendChild(style)
|
||
var mask = document.createElement('div')
|
||
mask.className = 'ie-mask'
|
||
var dialog = document.createElement('div')
|
||
dialog.className = 'ie-dialog'
|
||
dialog.innerHTML = '<div class="title">不支持 IE 浏览器</div>'+
|
||
'<div class="desc">Type Words 使用现代技术构建,请使用 Chrome、Edge、Firefox 或 Safari 等现代浏览器访问。</div>'+
|
||
'<div class="actions">'+
|
||
'<a class="btn" href="https://www.google.cn/chrome/" target="_blank" rel="noreferrer">下载 Chrome</a>'+
|
||
'<button class="btn-secondary" type="button">我知道了</button>'+
|
||
'</div>'
|
||
function close(){
|
||
try{document.body.removeChild(mask)}catch(e){}
|
||
try{document.body.removeChild(dialog)}catch(e){}
|
||
}
|
||
mask.addEventListener('click', close)
|
||
var btn = null
|
||
try{btn = dialog.querySelector('.btn-secondary')}catch(e){}
|
||
if (btn) btn.addEventListener('click', close)
|
||
document.body.appendChild(mask)
|
||
document.body.appendChild(dialog)
|
||
})()
|
||
</script>
|
||
<script type="module" src="/src/main.ts"></script>
|
||
</body>
|
||
</html>
|