我现在正在开发一个应用程序,并放置一个全局isDebug开关.我想换行console.log以方便使用.
//isDebug controls the entire site.
var isDebug = true;
//debug.js
function debug(msg, level){
var Global = this;
if(!(Global.isDebug && Global.console && Global.console.log)){
return;
}
level = level||'info';
Global.console.log(level + ': '+ msg);
}
//main.js
debug('Here is a msg.');
Run Code Online (Sandbox Code Playgroud)
然后我在Firefox控制台中得到了这个结果.
info: Here is a msg. debug.js (line 8)
Run Code Online (Sandbox Code Playgroud)
如果我想用debug()被调用的行号记录,info: Here is a msg. main.js (line 2)怎么办?
看起来我已经重新发明了这个轮子,但不知怎的,这在Internet Explorer 9中不起作用,但在IE6中也是如此.
function debug()
if(!window.console) {
window.console = { log: function() { /* do something */ } };
}
console.log.apply(console, arguments);
}
Run Code Online (Sandbox Code Playgroud)
F12 Debugger告诉我这个"对象"(console.log)不支持'apply'方法.它甚至不被认为是一种功能吗?还有其他指示或想法吗?
是否可以扩展控制台对象?
我尝试过类似的东西:
Console.prototype.log = function(msg){
Console.prototype.log.call(msg);
alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
但这没效果.我想通过像log4javascript这样的框架向控制台对象添加额外的日志记录,并且仍然在我的代码中使用标准控制台对象(在log4javascript不可用的情况下).
提前致谢!
我有一个我无法更改的脚本,它会调用很多console.log.我想添加另一个图层并在调用包含某些字符串时进行响应.这适用于FF,但在第4行Chrome中引发了"非法调用"错误:
var oldConsole = {};
oldConsole.log = console.log;
console.log = function (arg) {
oldConsole.log('MY CONSOLE!!');
oldConsole.log(arg);
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决?我也试过克隆控制台......
我正在尝试Array仅使用一个基于多个列过滤数据Pipe.现在,它过滤第一列值.请检查我的下面的代码,并帮助我解决这个问题.
我的代码:
@Pipe({ name: "dataFilter", pure: false })
export class DataFilterPipe implements PipeTransform {
transform(value: Array<any>, filter: any[]) {
if (!filter) {
return value;
} else if (value) {
return value.filter(item => {
for (var i = 0; i < filter.length; i++) {
if (filter[i][1] == undefined) {
return true;
} else if ((typeof item[filter[i][0]] === 'string' || item[filter[i][0]] instanceof String) &&
(item[filter[i][0]].toLowerCase().indexOf(filter[i][1]) !== -1)) {
return true;
}
return false;
}
});
}
}
} …Run Code Online (Sandbox Code Playgroud) 对于 js console.log 拦截器的通常建议(Capturing javascript console.log?)在两个方面都存在不足,都很严重:
(i) 实际浏览器控制台中的所有调用现在似乎都来自同一行——定义新函数的地方——而不是调用完成的地方
(ii) 截取的参数还没有像这样格式化console.log(即%替换好东西,%o特别是):
(function() {
function send_stuff(){ /* Deal with console arguments. */ }
var oldLog=console.log;
console.log=function(msg) {
oldLog.apply(this,arguments);
send_stuff(Array.prototype.slice.call(arguments).join());
}
}())
console.log("test");
console.log("Hello %s", "Bob");
console.log("Here is an object %o", { stuff: "thing" });Run Code Online (Sandbox Code Playgroud)
也许已经设计了更好的东西(例如能够捕获 console.log 的实际缓冲区内容的东西)。
编辑: 为了澄清多个参数失败:除了扩展文件/行信息之外,console.log 还做了一些巧妙的替换 - a-la-printf - % 序列。特别有趣的是 %o 序列,其中扩展了后续对象的深度转储,并被浏览器的控制台窗口很好地利用。这是无法复制的,除非人们愿意基本上重新实现其逻辑(不必要并且很可能效率低下)
干杯,
我正在使用第三方小工具,他们提供实时可用性,成本和立即预订按钮.当客户点击立即预订按钮时,它正在使用他们想要忽略的预订小工具.
在做了一些谷歌研究之后,当一些人点击现在的书籍按钮时,我能够在控制台日志下获得正确的标题和费用.
$w.event.subscribe("item.book.click", function(item) {
console.log(item);
console.log("Title " + item[3].Name + " (Date " + item[4].date + ", Period " + item[4].period + ", Adults " + item[4].adults + ", Children " + item[4].children + ", Infants " + item[4].infants + ")");
console.log("Price " + item[3].Availability.Cost);
});
Run Code Online (Sandbox Code Playgroud)
WooCommerce简单产品现场演示:http://plugin.seminyak.holiday/product/the-layar/#/accom/66268
单击立即预订按钮,查看控制台记录它返回的标题和价格值,但如何在弹出按钮中触发控制台数据值,如立即购买和添加项目到购物车.
当用户点击ADD ITEM TO CART时,它会将数据添加到/ cart page + basket中.如果有人点击立即购买按钮,它将获取数据并重定向用户on / checkout页面,其中包含控制台标题和价格
如果您有任何疑问,请告诉我.
无论如何我可以在Google Chrome中保存或导出JavaScript控制台输入(控制台历史记录)的历史记录吗?我不打算保存输出或错误,因此将鼠标悬停在控制台框上,右键单击并选择Save as...不是解决方案.我不想每次都使用箭头键向上滚动并复制并粘贴内容.
javascript ×8
angular ×2
console ×2
debugging ×2
browser ×1
extend ×1
filter ×1
jquery ×1
logging ×1
php ×1
pipe ×1
typescript ×1
woocommerce ×1
wordpress ×1