private static IntPtr GetContextByName(string contextName) { Xpcom.AssertCorrectThread(); IntPtr rt = Runtime; IntPtr iterp = IntPtr.Zero; IntPtr cx; while ((cx = SpiderMonkey.JS_ContextIterator(rt, ref iterp)) != IntPtr.Zero) { IntPtr global = SpiderMonkey.JS_GetGlobalObject(cx); if (global != IntPtr.Zero) { IntPtr classp = SpiderMonkey.JS_GetClass(global); // get class name if (classp != IntPtr.Zero) { string className = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(classp)); if (className == contextName) { return(cx); } } } } return(IntPtr.Zero); }