11

我们有一个在 kiosk 模式下运行的 web 应用程序 Firefox,使用 RKiosk 扩展来实现这一点。我们怀疑系统中有一个非常罕见的错误,它会导致 JavaScript 错误。但是,由于我们无法访问 JavaScript 控制台,我们无法检查日志。

我正在寻找一个选项,让 Firefox 将所有 JavaScript 控制台消息记录到一个文件中,而不管打开的选项卡和页面如何。我似乎找不到任何扩展名。我已经在使用 log4javascript 将错误发送回服务器,但似乎我们的应用程序崩溃了,它完全跳过了日志记录。

4

7 回答 7

4

对我来说,写入文件听起来像是一项乏味的任务。它需要浏览器代码通常没有的权限,并且您必须与必须编写的附加组件协商才能访问文件 I/O

据我了解你的问题是

我想让 Firefox 记录所有错误

我们可以采取几种方法来解决这个问题

第一种方法 - 也将所有内容记录到 localStorage:

localStorage现在,您可以写入或改为写入,而不是写入实际文件IndexedDB

localStorage["myApplog"] = localStorage["myApplog"] || "";
var oldLog = console.log;
console.log = function(){
    oldLog.apply(console,arguments); // use the old console log
    var message =  "\n "+(new Date).toISOString() + " :: "+
                   Array.prototype.join.call(arguments," , "); // the arguments
    localStorage["myApplog"] += message; 
}

这很脏而且很慢,但它应该可以完成工作,您可以稍后在本地存储中访问日志。如果我没记错的话,LocalStorage 有一个 ~5MB 的限制,如果你不疯狂地记录,我认为这已经足够了。您也可以有选择地运行它。

第二种方法 - 仅记录错误

这与 Pumbaa80 的建议类似。您可以简单地覆盖window.onerror并且只记录错误。

// put an empty string in loggedWinErrors first
var oldError = window.onerror || function(){};
window.onerror = function(err,url,lineNumber){
   oldError.call(this,err,url,lineNumber);
   var err ="\n Error: (file: " + url+", error: "+err+", lineNumber: "+lineNumber+")"); 
   localStorage["loggedWinErrors"] += err;
}

第三种也是激进的方法 - 使用虚拟机。

这是最强大的版本,但它提供了最有问题的用户体验。您在虚拟机中运行信息亭,您检测到未捕获的异常 - 当您冻结机器并保存其状态时,并运行备份 VM。我只需要在处理最可怕的错误时才这样做,而且它并不漂亮。除非你真的想要整个捕获的状态 - 不要这样做。

真的,在此之前进行扩展 - 这很乏味,但会得到非常可靠的结果。


总之,我认为第一种方法甚至第二种方法都足以满足您的需求。localStorage是网页用于保存状态而没有安全问题的抽象存储。如果这还不够大,我们可以讨论 IndexedDB 解决方案。

这完全取决于您拥有的用例。

于 2013-10-15T09:20:00.563 回答
3

您可以使用XULRunner ... XUL的 Mozilla 运行时环境应用程序它像 Firefox 一样使用Gecko ,并且:

  1. 您可以访问文件系统或使用SQLite数据库来存储日志。
  2. 您可以在不使用扩展程序的情况下以全屏模式呈现您的信息亭。
于 2013-10-22T03:20:02.857 回答
1

尝试以下控制台导出。它是 Firefox 的Firebug插件。这很方便。

http://www.softwareishard.com/blog/consoleexport/

于 2014-05-16T21:41:02.160 回答
1

您是否考虑过远程日志记录?

我通常指定window.onerror向远程存储错误详细信息的网络服务器发送请求。如果您愿意,也可以这样做console.log

于 2013-10-21T20:54:24.423 回答
1

你试过 jserrorcollector 吗?我们正在使用它,它运行良好(仅在 Firefox 中)。它仅适用于 Java。

// Initialize
FirefoxProfile ffProfile = null;
ffProfile = new FirefoxProfile();
JavaScriptError.addExtension(ffProfile);

 // Get the errors
List<JavaScriptError> jsErrors = JavaScriptError.readErrors(webDriver);

更多信息:https ://github.com/mguillem/JSErrorCollector

于 2013-10-22T08:38:43.077 回答
0

您可以使用像Qbaka这样的远程日志记录脚本。它捕获每个 JS 错误并将其发送到 Qbaka 服务器。在那里您可以登录并查看所有 JS 错误。Qbaka 存储每个错误消息的确切错误消息、脚本、行号、堆栈跟踪和使用的浏览器。

于 2013-10-22T07:44:56.267 回答
0

如果您能够/愿意从 Firefox 切换到 Chrome 或 Opera,您将能够使用 Sandboxed Filesystem API 来编写本地文件。看:

使用自助服务终端模式启动chrome.exe --kiosk <url>

然后,您需要禁用 Alt-F4 和 Ctrl-Alt-Del,这在 Windows 上可以使用Auto Hotkey禁用 Ctrl-Alt-Del 脚本)等多种第三方工具来完成。

于 2013-10-22T07:29:06.087 回答