@@ -21,10 +21,7 @@ public sealed class ChakraJavaScriptExecutor : IJavaScriptExecutor
2121
2222 private JavaScriptSourceContext _context ;
2323
24- private JavaScriptNativeFunction _consoleInfo ;
25- private JavaScriptNativeFunction _consoleLog ;
26- private JavaScriptNativeFunction _consoleWarn ;
27- private JavaScriptNativeFunction _consoleError ;
24+ private JavaScriptNativeFunction _nativeLoggingHook ;
2825
2926 private JavaScriptValue _globalObject ;
3027
@@ -212,24 +209,11 @@ private void InitializeChakra()
212209 {
213210 JavaScriptContext . Current = _runtime . CreateContext ( ) ;
214211
215- var consolePropertyId = default ( JavaScriptPropertyId ) ;
216- Native . ThrowIfError (
217- Native . JsGetPropertyIdFromName ( "console" , out consolePropertyId ) ) ;
218-
219- var consoleObject = JavaScriptValue . CreateObject ( ) ;
220- EnsureGlobalObject ( ) . SetProperty ( consolePropertyId , consoleObject , true ) ;
221-
222- _consoleInfo = ConsoleInfo ;
223- _consoleLog = ConsoleLog ;
224- _consoleWarn = ConsoleWarn ;
225- _consoleError = ConsoleError ;
226-
227- DefineHostCallback ( consoleObject , "info" , _consoleInfo ) ;
228- DefineHostCallback ( consoleObject , "log" , _consoleLog ) ;
229- DefineHostCallback ( consoleObject , "warn" , _consoleWarn ) ;
230- DefineHostCallback ( consoleObject , "error" , _consoleError ) ;
231-
232- Debug . WriteLine ( "Chakra initialization successful." ) ;
212+ _nativeLoggingHook = NativeLoggingHook ;
213+ EnsureGlobalObject ( ) . SetProperty (
214+ JavaScriptPropertyId . FromString ( "nativeLoggingHook" ) ,
215+ JavaScriptValue . CreateFunction ( _nativeLoggingHook ) ,
216+ true ) ;
233217 }
234218
235219 #region JSON Marshaling
@@ -270,59 +254,7 @@ private JToken ConvertJson(JavaScriptValue value)
270254 #endregion
271255
272256 #region Console Callbacks
273-
274- private static void DefineHostCallback (
275- JavaScriptValue obj ,
276- string callbackName ,
277- JavaScriptNativeFunction callback )
278- {
279- var propertyId = JavaScriptPropertyId . FromString ( callbackName ) ;
280- var function = JavaScriptValue . CreateFunction ( callback ) ;
281- obj . SetProperty ( propertyId , function , true ) ;
282- }
283-
284- private JavaScriptValue ConsoleInfo (
285- JavaScriptValue callee ,
286- bool isConstructCall ,
287- JavaScriptValue [ ] arguments ,
288- ushort argumentCount ,
289- IntPtr callbackData )
290- {
291- return ConsoleCallback ( "Info" , callee , isConstructCall , arguments , argumentCount , callbackData ) ;
292- }
293-
294- private JavaScriptValue ConsoleLog (
295- JavaScriptValue callee ,
296- bool isConstructCall ,
297- JavaScriptValue [ ] arguments ,
298- ushort argumentCount ,
299- IntPtr callbackData )
300- {
301- return ConsoleCallback ( "Log" , callee , isConstructCall , arguments , argumentCount , callbackData ) ;
302- }
303-
304- private JavaScriptValue ConsoleWarn (
305- JavaScriptValue callee ,
306- bool isConstructCall ,
307- JavaScriptValue [ ] arguments ,
308- ushort argumentCount ,
309- IntPtr callbackData )
310- {
311- return ConsoleCallback ( "Warn" , callee , isConstructCall , arguments , argumentCount , callbackData ) ;
312- }
313-
314- private JavaScriptValue ConsoleError (
315- JavaScriptValue callee ,
316- bool isConstructCall ,
317- JavaScriptValue [ ] arguments ,
318- ushort argumentCount ,
319- IntPtr callbackData )
320- {
321- return ConsoleCallback ( "Error" , callee , isConstructCall , arguments , argumentCount , callbackData ) ;
322- }
323-
324- private JavaScriptValue ConsoleCallback (
325- string kind ,
257+ private JavaScriptValue NativeLoggingHook (
326258 JavaScriptValue callee ,
327259 bool isConstructCall ,
328260 JavaScriptValue [ ] arguments ,
@@ -331,46 +263,17 @@ private JavaScriptValue ConsoleCallback(
331263 {
332264 try
333265 {
334- Debug . Write ( Invariant ( $ "[JS { kind } ]") ) ;
335-
336- // First argument is this-context, ignore...
337- for ( var i = 1 ; i < argumentCount ; ++ i )
338- {
339- Debug . Write ( Stringify ( arguments [ i ] ) + " " ) ;
340- }
341-
342- Debug . WriteLine ( "" ) ;
266+ var message = arguments [ 1 ] . ToString ( ) ;
267+ var logLevel = ( LogLevel ) ( int ) arguments [ 2 ] . ToDouble ( ) ;
268+ Debug . Write ( $ "[JS { logLevel } ] { message } ") ;
343269 }
344- catch ( Exception ex )
270+ catch
345271 {
346- Debug . WriteLine ( Invariant ( $ "Error in ChakraExecutor.ConsoleCallback: { ex . Message } " ) ) ;
272+ Debug . Write ( "Unable to process JavaScript console statement" ) ;
347273 }
348274
349275 return JavaScriptValue . Undefined ;
350276 }
351-
352- private string Stringify ( JavaScriptValue value )
353- {
354- switch ( value . ValueType )
355- {
356- case JavaScriptValueType . Undefined :
357- case JavaScriptValueType . Null :
358- case JavaScriptValueType . Number :
359- case JavaScriptValueType . String :
360- case JavaScriptValueType . Boolean :
361- case JavaScriptValueType . Object :
362- case JavaScriptValueType . Array :
363- case JavaScriptValueType . TypedArray :
364- return ConvertJson ( value ) . ToString ( Formatting . None ) ;
365- case JavaScriptValueType . Function :
366- case JavaScriptValueType . Error :
367- case JavaScriptValueType . Symbol :
368- case JavaScriptValueType . ArrayBuffer :
369- return value . ConvertToString ( ) . ToString ( ) ;
370- default :
371- throw new NotImplementedException ( ) ;
372- }
373- }
374277 #endregion
375278
376279 #region Global Helpers
0 commit comments