[英]Replicating/overriding javascript's console.log function
好的,这就是我想要做的:
console.log
中的message / errors / logs / etc不可见,因此将它们转发到相应的Cocoa函数(我创建了一个类似- (void)log:(NSString*)msg
函数,只需将参数作为字符串并在Xcode的控制台窗口中将其打印出来即可。 现在,问题是如何100%复制console.log
所做的工作+将消息转发到我自己的log
功能?
到目前为止,这是我所做的:
使用Javascript
console.log = function(text) {
API.log_(text);
}
Objective-C的
- (void)log:(NSString*)msg
{
NSLog(@"Logging from JS : %@", msg);
}
如果在调用console.log("something")
,“ text”是一个简单的文本字符串,则可以正常工作。 如果我将console.log函数传递给一个对象,则该对象将无法正常工作(例如,在Chrome的Javascript控制台窗口中)。
你会怎么做?
是否有可能得到一个什么样的字符串输出console.log
通常会打印出来?
PS我试过玩JSON.stringify(obj, null, 4)
一点,但它仍然看起来不正确。 有任何想法吗?
听起来您想保留原始功能,同时还要捕获输入并将其传递给您的API。 这可以通过(JSFiddle)之类的东西来实现:
var original = console.log,
API = {
log_: function() {
// Your API functionality
}
};
console.log = function() {
original.apply(console, arguments);
API.log_(arguments);
};
有两点要指出。 首先,本机console.log
可以接收任意数量的参数,因此我们使用arguments
来处理。 我们必须使用.apply()
在console
的上下文中调用原始方法,它还允许我们传递与原始调用完全相同的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.