簡體   English   中英

復制/覆蓋javascript的console.log函數

[英]Replicating/overriding javascript's console.log function

好的,這就是我想要做的:

  • 我正在構建Javascript-> Cocoa / Objective-C橋(實際上是一個小測試),這意味着我可以從我的JavaScript代碼中調用Objective-C函數。
  • 面臨的問題之一是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM