"Benjamin Smedberg" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> >>Do you still need to know how to call JavaScript functions from C++? I
have
> >>done this successfully from my C++ XPCOM object.
>
> > I was about to dive into this myself. I would be very interested in
> > seeing how it can be done.
>
> The basic idea is to implement an interface using a JS object. Then you
> can call into that interface from C++ and XPConnect will map it for you.
>
> --BDS
>
Hi,
I have called Java Script functions from my XPCOM components several times.
This is a snippet from a JS function call that returns a string.
// query for the global script object from the content window
nsCOMPtr<nsIScriptGlobalObject> pScriptObject;
pScriptObject = do_QueryInterface(pWindow, &rv);
JSContext* pJSContext = nsnull;
jsval jval;
jsval jsargs = 0L;
if(pScriptObject != nsnull)
{
// Get the script context
nsCOMPtr<nsIScriptContext> pScript;
pScriptObject->GetContext(getter_AddRefs(pScript));
if(pScript != nsnull)
{
pJSContext = (JSContext*)pScript->GetNativeContext();
if(pJSContext != nsnull)
{
JSBool jb = JS_CallFunctionName(pJSContext, pJSContext->globalObject,
MY_JSCRIPT_FUNCTION_NAME, 0, &jsargs, &jval);
if(jb == JS_TRUE)
{
JSString *s = JS_ValueToString(pJSContext, jval);