javascript - 复制/覆盖 javascript 的 console.log 函数

标签 javascript html objective-c macos cocoa

好的,这就是我要做的:

  • 我正在构建一个 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/

相关文章:

html - 缩小屏幕时移动文本页脚

ios - NSManagedObjectContext 没有正确保存到 SQLite

iphone - 如何检查哪个类是在 Objective C 中初始化的对象

javascript - 从导航 react native 调用功能

javascript - 通过 GUI 生成动态 HTML 表单

html - 拉动 div 右/左 Bootstrap 中的所有元素

iOS 7 TableView 出队不起作用

javascript - 使用加权概率和值查找数组中的项目

javascript - 基于页面高度的css三 Angular 形

javascript - 如果未选中复选框,则阻止提交表单