-1

私は Google Chrome 拡張機能を作成しており、40 年前に行っていた種類のコーディングから、HTML、CSS、および Javascript でのコーディングに移行しようとしています。これは大きな学習曲線ですが、コンソールのログ記録が少しあれば大いに役立ちます。(古い鉄心メモリの Sperry Univacs に緑色の蛍光体ディスプレイがあったことを覚えている人はいますか? 今では、何が起こっているかを知らせるコンソールがありました。テープをマウントするか、ディスクパックを交換するか、プリンターに用紙を追加します。) しかし、余談になります。 .

ほんの数日前、次のようにコンテンツ スクリプトまたはバックグラウンド ページから Google Chrome DOM Inspector コンソール ログにメッセージを送信できました。

console.log="コンテンツ スクリプト PEEK.JS からの要求を受け取りました";

後でそのコードが挿入されたページを調べると、コンソールにまったく同じメッセージが表示されます。その行が 4 回実行された場合、そのメッセージの 4 つのインスタンスがコンソールに順番に表示されます。シンプルだけど美しかった。

これで、「console.log」と入力しない限り、コンソールには何も表示されません。この場合、メッセージの最後のインスタンスのみが表示されます。ここで何が問題なのですか?デバッガーで何かをオフにしましたか? コードを間違って書いていますか?「console.log("Message Here");」- (これは常にエラーを返します) ?

私は文字通り何時間もかけてこの質問の答えを見つけようとしましたが、この質問は非常に単純であるため、十分な教育を受けた子供でも答えられるとしか思えません。別の方法は、暗示または警告メッセージからバグを見つけるために、より多くの時間を費やすことです。デバッグのためにインスペクターを効果的に使用する方法を学ぶことに何時間も費やしたほうがよいでしょう。

たとえば、昨日、バックグラウンドでコンテンツから各アイテムを連続して要求するのではなく、配列をコンテンツからバックグラウンドに渡すように、以前は機能していたコードを再構築した後、予想どおり、拡張機能が壊れました。コンソールには、「タブの executeScript 中のエラー: 不明なエラー」という 1 つのエラー メッセージが表示されます。同じ行の右端に「chrome/ExtensionProcessBindings:95」というリンクがあります。明らかに、エラーメッセージはほとんど役に立ちません。リンクをクリックするとリソース パネルが表示され、右側に "background.html" という単語が表示された空白のフレームが表示されます。これも役に立たないようです。

この情報はどのように役立ちますか? 変数定義をコード内の別の場所に移動したため、executeScript 行が実行された時点で定義されていなかったことを理解するのに、さらに 6 時間かかりました。executeScript でパラメーターが定義されていないというエラー メッセージが表示されていれば、約 10 分で見つけることができたはずです。

元の質問に戻ります-私は簡単な答えが欲しいです-関数を書くように言わないでください。関数を何も記述せずに、2 日前に欲しかったものをコンソールに表示しているのを見ました。

4

2 に答える 2

3

これがあなたの簡単な答えです:代わりに

console.log="RECEIVED REQUEST FROM CONTENT SCRIPT PEEK.JS";

あなたは使用する必要があります

console.log("RECEIVED REQUEST FROM CONTENT SCRIPT PEEK.JS");
于 2011-06-26T10:56:38.437 に答える
0
  • の場合console.log():

    https://developer.mozilla.org/en-US/docs/Web/API/console.log

    Mozilla Developer Network で、JavaScript や多くのブラウザー テクノロジに関するドキュメントを検索することをお勧めします。

  • 変数のタイプミスやスコープ外の変数を支援するための私の一般的な提案は、厳密な javascript を使用することです。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

    これにより、特定の JavaScript イディオムが早期に検出され、より有用な診断を提供するエラーになります。(簡単なバージョンは"use strict";、js ファイルの先頭に 1 行を配置することです。または、それが多くの問題を引き起こす場合は、関数内の最初の行として配置して、関数ごとの移行を行うことができます。)

  • 場合によってはコンソールにconsole.log = blahが表示される理由は、JS ではと同じ値に評価される式ですが、にも代入されるという副作用があるためです。(これは C 代入式に似ています。)blah<left side> = <right side expression><right side expression><left side>

    次に、現在のコンテキストで、コンソールに式の評価の結果が表示されます。console.log()これは、その関数の意図した副作用として引数を表示する明示的な呼び出しとは異なります。

    その場合、標準console.log関数を文字列で上書きすると、式全体がその文字列値に評価され、コンソールの組み込みの動作 (関数ではありませんconsole.log()!) が評価の結果を表示します。

    JS では、ほとんどのものが変更可能であり、あらゆる種類のフィールドと変数を上書きできるため、この潜在的な落とし穴に注意してください!

また、Web でヘルプを求める場合の一般的な推奨事項:

StackOverflow のようなサイトでは、投稿を非常に具体的な単一の質問に制限することです。これは、同様の問題を抱えている人々が Web 検索や他のリンクに基づいてここに来るためであり、彼らはこのページが彼らの特定の問題に役立つかどうかをすぐに判断する必要があります. 複数の質問や逸話が含まれる段落を読まなければならない場合、これは本当に遅くなります。それが、この質問が反対票を投じられた理由だと思います。

複数の質問がある場合は、個別の投稿を作成してください。StackOverflow は、過去の経験に関する逸話を掲載するのに適したサイトではありません。FWIW- 私は個人的に、70 年代のマシンのプログラマーとしてのあなたのバックグラウンドを興味深いと思いましたが、多くの読者は詳細で迷子になるかもしれません. この種の逸話は、良いブログ投稿になる可能性があります。

于 2013-10-17T20:54:05.243 に答える