"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);


Reply via email to