是否可以通过网页中运行的JavaScript代码向Firefox的内置错误控制台添加消息?
我知道我有Firebug,它提供了一个console
对象和它自己的错误控制台,但我之前正在寻找一个快速修复,但找不到任何东西。
我想可能根本不可能阻止恶意网页发送垃圾邮件?
答案 0 :(得分:46)
如果您定义一个检查window.console是否存在的全局函数,您可以使用Firebug进行跟踪,并且仍可以与其他浏览器一起使用和/或如果您关闭Firebug的控制台跟踪:
debug = function (log_txt) {
if (typeof window.console != 'undefined') {
console.log(log_txt);
}
}
debug("foo!");
答案 1 :(得分:33)
是的,你可以= P
function log(param){
setTimeout(function(){
throw new Error("Debug: " + param)
},0)
}
//Simple Test:
alert(1)
log('This is my message to the error log -_-')
alert(2)
log('I can do this forever, does not break')
alert(3)
更新到实际功能
这是一个简单的黑客,只是为了好玩。
答案 2 :(得分:32)
您无法直接从不受信任的JavaScript(例如来自页面的脚本)写入控制台。但是,即使安装Firebug对您没有吸引力,我建议您查看Firebug Lite,这不需要安装到浏览器中(事实上,它甚至不需要Firefox)。这是一个可以包含在任何网页中的脚本(甚至是动态的),它将为您提供一些基本的Firebug功能(例如console.log()
)。
答案 3 :(得分:14)
window.console在Firefox 4 beta 6中未定义,可能是因为其他人讨论的权限问题。但是,Firefox 4有一个新工具> Web控制台,如果打开它,您有一个window.console对象,页面上不受信任的JavaScript代码可以使用console.log()。 Web控制台不断变化(请参阅https://wiki.mozilla.org/Firefox/Projects/Console),您可能需要在about:config,YMMV中更改名为devtools。*的设置。
答案 4 :(得分:6)
我只需安装Firebug并使用console.log
。但是,如果你不能这样做,你总是会抛出一个错误:
throw "foobar";
throw new Error("bazquux");
当然,这会让你脱离正在执行的代码,所以你不能用它来进行详细的日志记录,但如果你可以解决这个问题,我认为这是获取某些东西的唯一方法的盒子。
答案 5 :(得分:3)
AFAIK,这是不可能的。但是,如果您对Firefox中的扩展如何与错误控制台进行交互感兴趣,check this out。
答案 6 :(得分:2)
此功能不需要任何扩展名或库。但是,它授予相关网站完全权限。不用担心,因为你是发展它的人,对吗?
// Define mylog() function to log to Firefox' error console if such a
// thing exists
function defineMyLog()
{
// Provide a useless but harmless fallback
mylog = function(msg) { };
// return; // disable in production
if (typeof(netscape) === "undefined") {
// alert("Logging implemented only for Firefox");
return;
}
// The initial auth popup can be avoided by pre-setting some magic user_pref
// ( "capability.principal.codebase.p0.granted", "UniversalXPConnect"), etc.
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
} catch (e) { // User has denied privileges
// alert(e.name + ": " + e.message);
return;
}
ffconsoleService = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
mylog = function (msg)
{
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
ffconsoleService.logStringMessage(new Date().toLocaleTimeString() + ": " + msg);
}
mylog("Firefox logging function has been defined");
// window.open("javascript:"); // this URL does not work anymore?
}
答案 7 :(得分:1)
如果您有兴趣,请查看我写的脚本 - 这是一个“便宜”的Firebug替代品,它不会干扰任何普通的控制台(如Safari或Chrome),但会使用几乎所有的Firebug方法扩展它:
http://code.google.com/p/glentilities/
看看引擎盖,你会看到“便宜”的意思。 : - )
将它与YUI或json.org的JSON序列化器结合使用,以对sorta复制console.dir进行排序。
Firebug和Firebug Lite绝对是更好的图形用户界面,但是我一直使用我自己开发的GUI,即使对于生产代码也能安全地保存日志 - 没有持续评论&取消注释,
答案 8 :(得分:0)
我今天遇到了一个问题,并注意到Firebug中的控制台有不同的标签,我的是Depuration Information,你必须选择ALL选项才能看到console.log工作而不会出现错误!很简单! ; ^)