/// <summary>
        /// Evaluate javascript in the current context.
        /// </summary>
        /// <param name="jsScript"></param>
        /// <param name="jsval"></param>
        /// <returns></returns>
        public bool EvaluateScript(string jsScript, out string result)
        {
            JSVal  ptr          = new JSVal();
            IntPtr globalObject = AutoJSContext.JS_GetGlobalForScopeChain(_cx);
            bool   ret          = AutoJSContext.JS_EvaluateScriptForPrincipals(_cx, globalObject, _jsPrincipals, jsScript, (uint)jsScript.Length, "script", 1, ref ptr);

            IntPtr jsStringPtr = JS_ValueToString(_cx, ptr);

            result = Marshal.PtrToStringAnsi(JS_EncodeString(_cx, jsStringPtr));
            return(ret);
        }