使用Skulpt搭建网页Python解释器报Sk is not defined错误如何解决
问题根因与解决方案
Uncaught ReferenceError: Sk is not defined 报错的核心原因是Skulpt相关的JS脚本没有被浏览器成功加载,导致全局对象Sk未初始化,按以下优先级排查修复:
1. 修复资源加载协议问题
你当前使用的是http协议的Skulpt公共CDN链接,若你的个人网站是https协议,浏览器会触发混合内容拦截规则,直接阻止非安全的HTTP资源加载,导致Sk对象无法生成。
将head区域的脚本引入替换为HTTPS协议版本即可:
<head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript"></script> <script src="https://www.skulpt.org/js/skulpt.min.js" type="text/javascript"></script> <script src="https://www.skulpt.org/js/skulpt-stdlib.js" type="text/javascript"></script> </head>
2. 解决CDN可用性问题
如果修改协议后仍报错,打开浏览器F12开发者工具的「网络」面板,刷新页面查看skulpt.min.js、skulpt-stdlib.js的请求状态:
- 若返回404/加载失败,说明官方公共CDN对你的网络不可用,可将两个Skulpt的JS文件下载到站点本地,改为引用本地路径即可,避免跨域、CDN节点故障问题
- 若返回200正常,可在控制台输入
Sk回车,能返回对象说明加载完成,此时点击运行按钮即可正常执行
3. 容错优化(可选)
可以给执行函数加前置判断,避免资源未加载完成时点击按钮抛出异常:
function runit() { // 新增前置校验逻辑 if (typeof Sk === 'undefined') { alert('解释器资源加载中,请稍候重试'); return; } // 原有代码逻辑保持不变 var prog = document.getElementById("yourcode").value; var mypre = document.getElementById("output"); // ...后续原有代码 }
内容的提问来源于stack exchange,提问作者Rocka
相关产品推荐
相关产品推荐

