好的,这就是我要做的:
- 我正在构建一个 Javascript->Cocoa/Objective-C 桥(实际上是一个小测试),这意味着我能够从我的 JavaScript 代码调用 Objective-C 函数。
- 面临的问题之一是来自
console.log
的消息/错误/日志/等不可见,因此它们将被转发到相应的 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
通常打印的字符串输出?
附言我试着玩了一下 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);
};
有几点需要说明。首先, native console.log
可以接收任意数量的参数,因此我们使用 arguments
来处理这个问题。我们必须使用 .apply()
在 console
的上下文中调用原始方法,它还允许我们传递与原始调用完全相同的参数。
关于javascript - 复制/覆盖 javascript 的 console.log 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699321/