2014-09-06 76 views
1

好了,這裏就是我想要做什麼:複製/重寫JavaScript的執行console.log功能

  • 我建立一個Javascript成爲>可可/ Objective-C的橋(一個微小的實際測試)這意味着我可以從JavaScript代碼中調用Objective-C函數。
  • 面臨的一個問題是,從console.log的消息/錯誤/日誌/等是不可見的,所以他們將被轉發到相應的可可功能(我創建了一個像- (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")時,那麼它工作正常。如果我將console.log函數傳遞給一個對象,那麼它不能按預期工作(例如,在Chrome的Javascript控制檯窗口中)。

你會怎麼做呢?

是否有可能得到console.log通常打印出來的字符串輸出?


P.S.我嘗試了一下JSON.stringify(obj, null, 4),但它看起來似乎不對。有任何想法嗎?

回答

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的上下文中調用原始方法,並且它還允許我們按照原始調用中的原樣傳遞參數。

+0

非常感謝! ;-) – 2014-09-06 13:27:13

+0

@ Dr.Kameleon任何時間:) – 2014-09-06 13:30:07