我试过使用 jQuery Terminal 插件,起初我认为我的脚本没问题。然后我尝试将它上传到两个免费的虚拟主机来测试它,我遇到了你需要刷新页面才能使其正常工作的问题。至少对于初始加载,即假设未清除浏览器的网络历史记录,成功访问网页,它就会工作。
它显示如下错误:
[TERMINAL]:无法调用未定义的方法“添加”
TypeError:无法在 HTMLBodyElement 处调用未定义的方法“添加”。(/js/jquery.terminal-src.js:266:30)
at Function.m.extend.each (http://code.jquery.com/jquery-1.11.3.min.js:2:2975)
at m.fn.m.each (http://code.jquery.com/jquery-1.11.3.min.js:2:835)
at jQuery.fn.extend.oneTime (/js/jquery.terminal-src.js:265:25)
at $.extend.$.omap.focus (/js/jquery.terminal-src.js:3640:26)
at null.focus (/js/jquery.terminal-src.js:4152:36)
at js/jquery.terminal-src.js:4264:26
at make_interpreter (/js/jquery.terminal-src.js:2811:17)
at $.fn.terminal (/js/jquery.terminal-src.js:4233:13)
at HTMLDocument.<anonymous> (/js/jquery.terminal-src.js:4336:313)
[注:我删除了上述消息的网站链接!]
它也只会为 Safari 输出:[TERMINAL]: 'undefined' is not an object (evalating 'jQuery.timer.add')
显示上述消息后,会出现命令提示符,但其运行的脚本不起作用。
我意识到问题可能出在初始化脚本的这一部分:
command_line = $('<div/>').appendTo(self).cmd({
prompt: settings.prompt,
history: settings.history,
historyFilter: settings.historyFilter,
historySize: settings.historySize,
width: '100%',
keydown: key_down,
keypress: settings.keypress ? function(e) {
return settings.keypress(e, self);
} : null,
onCommandChange: function(command) {
if ($.type(settings.onCommandChange) === 'function') {
try {
settings.onCommandChange(command, self);
} catch (e) {
display_exception(e, 'onCommandChange');
throw e;
}
}
scroll_to_bottom();
},
commands: commands
});
if (enabled) {
self.focus(undefined, true);
} else {
self.disable();
}
if (enabled) { self.focus(undefined, true); } else { self.disable(); }
最后一部分就是这样。似乎“self.focus(undefined,true)”会导致问题。
我正在为文档的“正文”部分加载脚本,如下所示:
$('body').terminal(function(command, term) {
基本上,我刚刚加载的内容类似于 adva.io,但它是一个带有一点故事情节的在线表格。
我真的不明白为什么我在初始化时遇到问题:(错误消息提到的“未定义”部分和初始化的部分是什么?
顺便说一下,这是 jQuery 终端插件链接: http: //terminal.jcubic.pl/api_reference.php
起初我认为 jQuery 本身的调用有问题,比如当 jQuery 本身尚未加载时代码可能正在调用 jQuery 函数,但我修复了顺序并在http://tools.pingdom.com测试了它们的加载/和 jQuery 在其余的 jQuery 脚本初始化之前完全加载。
我也这样做了,这样我制作的自定义脚本与 jquery.terminal-src.js 位于同一个脚本文件中(在整个原始内容之后),只是为了确保我的脚本不会在它之前加载。