好的,所以这就是我要做的事情:
console.log
的消息/错误/日志/等是不可见的,因此它们将被转发到相应的Cocoa函数(我创建了一个像- (void)log:(NSString*)msg
这样的函数将参数作为字符串并在Xcode的控制台窗口中打印出来。现在,问题是如何100%复制console.log
所做的事情+将消息转发给我自己的log
函数?
这是我到目前为止所做的:
的Javascript
console.log = function(text) {
API.log_(text);
}
目标C
- (void)log:(NSString*)msg
{
NSLog(@"Logging from JS : %@", msg);
}
如果调用console.log("something")
时“text”是一个简单的文本字符串,那么它可以正常工作。如果我将console.log函数传递给一个对象,那么它就不能按预期工作(例如在Chrome的Javascript控制台窗口中)。
你会怎么做?
是否可以获取console.log
正常打印出来的字符串输出?
P.S。我尝试了JSON.stringify(obj, null, 4)
一点,但它似乎仍然不对。有什么想法吗?
答案 0 :(得分:2)
听起来您希望保留原始功能,同时捕获输入并将其传递给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
的上下文中调用原始方法,它还允许我们完全按照原始调用的方式传递参数。