-1

我正在编写一个 Google Chrome 扩展程序,并试图从 40 年前的那种编码过渡到 HTML、CSS 和 Javascript 编码。这是一个很大的学习曲线,但一点控制台日志记录会很有帮助。(谁还记得旧的铁芯内存 Sperry Univacs 上的绿色荧光粉显示?现在有一个控制台可以告诉你发生了什么 - 安装磁带,更换磁盘包或在打印机中放入更多纸张。)但我离题了.

就在几天前,我能够从我的内容脚本或后台页面向 Google Chrome DOM Inspector 控制台日志发送消息,如下所示:

console.log="从内容脚本 PEEK.JS 收到请求";

稍后,如果我检查注入该代码的页面,我会在控制台上看到完全相同的消息。如果该行执行了四次,我会在控制台上依次看到该消息的四个实例。这很简单但很漂亮。

现在,除非我输入“console.log”,否则控制台上不会出现任何内容,在这种情况下,我只看到消息的最后一个实例。这里有什么问题?我是否在调试器中关闭了某些东西?我是不是写错了代码?应该是:"console.log("Message Here");" - (这总是返回错误)?

我花了好几个小时试图找到这个问题的答案,我只能推测这个问题非常简单,即使是受过良好教育的孩子也能回答。另一种方法是花更多时间尝试通过暗示或警报消息找到我的错误。最好花时间学习如何有效地使用检查器进行调试。

例如,昨天在重组曾经工作的代码以便它将数组从内容传递到后台而不是后台从内容连续请求每个项目之后,扩展中断,正如预期的那样。控制台显示一条错误消息:“选项卡执行脚本期间出错:未知错误。” 在同一行的最右侧带有一个链接,上面写着“chrome/ExtensionProcessBindings:95”。显然错误信息几乎没有用。单击该链接将我带到资源面板,该面板在右侧显示一个空白框,上面写着“background.html”这似乎也没用。

这些信息有什么帮助?我又花了六个小时才弄清楚我已经将变量定义移动到代码中的另一个位置,因此在执行 executeScript 行时它没有被定义。如果错误消息说在 executeScript 中未定义参数,我可以在大约十分钟内找到它。

所以回到最初的问题——我想要一个简单的答案——不要告诉我写一个函数。前两天看到控制台显示我想要的东西,没有写任何函数。

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 开发者网络中搜索有关 JavaScript 和许多浏览器技术的文档。

  • 我一般建议帮助输入错误或超出范围的变量是使用严格的 javascript:

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

    这会使某些 JavaScript 惯用语变成更早检测到的错误,并提供更有用的诊断。(快速版本是将单行放在"use strict";js 文件的顶部,或者如果这会导致很多问题,您可以将其作为任何函数的第一行进行逐个函数迁移。)

  • 在某些情况下console.log = blah会在控制台上显示的原因是,在 JS 中,是一个计算结果与 just 相同的表达式,但它具有也赋值给的副作用。(这类似于 C 赋值表达式。)blah<left side> = <right side expression><right side expression><left side>

    然后,在您所处的上下文中,控制台将显示任何表达式评估的结果。这与显式调用不同,显式调用console.log()会将参数显示为该函数的预期副作用。

    因此,在这种情况下,您正在用字符串覆盖标准console.log函数,整个表达式的计算结果为该字符串值,并且控制台的内置行为(而不是console.log()函数!)将显示您的评估结果。

    在 JS 中大多数东西都是可变的,你可以覆盖各种字段和变量,所以要注意这个潜在的陷阱!

此外,在网络上寻求帮助的一般建议:

对于像 StackOverflow 这样的网站,您的帖子仅限于一个非常具体的问题。这是因为有类似问题的人会根据网络搜索或其他链接来到这里,他们需要弄清楚这个页面是否能帮助他们快速解决他们的特定问题。如果他们必须通读带有多个问题或轶事的段落,这真的会减慢他们的速度。我猜这就是为什么这个问题被否决的原因。

如果您有多个问题,请单独发帖。StackOverflow 不是一个关于您过去经历的轶事的好网站。FWIW-我个人觉得你作为 70 年代机器程序员的背景很有趣,但许多读者可能会迷失在细节中。这些轶事可以成为一篇很好的博客文章。

于 2013-10-17T20:54:05.243 回答