0

jQuery Terminal プラグインを使用してみましたが、最初は自分のスクリプトは問題ないと思いました。次に、それを 2 つの無料の Web ホストにアップロードしてテストしてみましたが、適切に機能させるためにページを更新する必要があるという問題が発生しています。少なくとも最初の読み込み、つまり、ブラウザーの Web 履歴が消去されていないと仮定して、Web ページへのアクセスに成功した場合、それは機能します。

次のようなエラーが表示されます。

[TERMINAL]: 未定義のメソッド 'add' を呼び出せません

TypeError: HTMLBodyElement で undefined のメソッド「add」を呼び出せません。(/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)

[注:上記のメッセージの Web サイトのリンクを削除しました!]

また、Safari の場合は次のように出力されます: [TERMINAL]: 'undefined' is not an object (evaluating '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 に似たものですが、代わりに、少しストーリーのあるオンライン フォームです。

初期化で問題が発生する理由がよくわかりません:(エラーメッセージで言及されている「未定義」部分とinitの部分は何ですか?

ちなみに、これは jQuery ターミナル プラグインのリンクです: http://terminal.jcubic.pl/api_reference.php

最初は、jQuery 自体がまだロードされていないときにコードが jQuery 関数を呼び出しているなど、jQuery 自体の呼び出しに問題があると思いましたが、順序を修正し、http: //tools.pingdom.com でロードをテストしました。 /そして jQuery は、残りの jQuery スクリプトが初期化される前に完全にロードされます。

また、作成したカスタム スクリプトが jquery.terminal-src.js と同じスクリプト ファイルにあるようにしました (元のもの全体の後)。これは、スクリプトがその前に読み込まれないようにするためです。

4

2 に答える 2

1

コードの後に​​別のjqueryをロードしている場合は、使用してみてくださいjQuery.noConflict();

(function($) {
   $('...').terminal(...);
})(jQuery.noConflict());
于 2015-08-24T13:38:12.690 に答える
0

ページの読み込みが完了した後、 jquery.getScriptを使用してみましたか? いくつかのサードパーティ製ツールを使用してロードの順序を確認したとのことですが、別のスクリプトが jQuery を再度ロードすると、その時点までにアタッチされた jQuery 変数にアタッチされたすべてのプラグインが失われる可能性があります。 .

IE の[ネットワーク] タブ(または他のブラウザーの同様のタブ) をチェックして、これが発生しているかどうかを確認できます。

アップデート:

以下を試してください。

$(function() {
  $.getScript( "/js/jquery.terminal-src.js")
    .done(function( script, textStatus ) { // optional
      // success code here
    })
    .fail(function( jqxhr, settings, exception ) { // optional
      // fail code here
    });

  // the rest of your code here

});
于 2015-08-17T13:10:35.133 に答える