On Feb 28, 10:52 am, [EMAIL PROTECTED] wrote:
> On Feb 28, 3:12 am, [EMAIL PROTECTED] wrote:
>
>
>
> > This is a two parter. First of all, as part of an extension I have an
> > xpcom component that wants to talk with Spidermonkey. I assume I can
> > use the currently running instance that already lives in Mozilla, and
> > in this case, how to I get a usable JSContext? I've tried:
>
> >     // error handling removed
> >     nsCOMPtr<nsIXPConnect> xpc = do_GetService("@mozilla.org/js/xpc/
> > XPConnect;1");
> >     if (xpc)
> >     {
> >     nsCOMPtr<nsIXPCNativeCallContext> call;
> >     rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(call));
> >     if (call)
> >     {
> >     JSContext * cx;
> >     call->GetJSContext(&cx);
> >     return cx;
>
> > and also:
>
> >     nsCOMPtr<nsIJSContextStack> cxstack = do_GetService("@mozilla.org/
> > js/xpc/ContextStack;1");
> >     if (cxstack)
> >     {
> >     JSContext * cx;
> >     cxstack->Peek(&cx);
> >     return cx;
>
> > Are either of these okay?
>
> > Secondly, assuming I have a good JSContext, I want to take
> > nsIDOMElement pointers from Gecko and wrap them in JSObjects so that I
> > can do javascript things to them, like looking up properties. I'm
> > trying this:
>
> > JSClass global_class = {
> >    "global",0,
> >     JS_PropertyStub,JS_PropertyStub,
> >     JS_PropertyStub,JS_PropertyStub,
> >     JS_EnumerateStub,JS_ResolveStub,
> >     JS_ConvertStub,JS_FinalizeStub
>
> > };
>
> > JSObject * Wrap(JSContext * cx, nsISupports * supports)
> > {
> >     JSObject * glob = JS_GetGlobalObject(cx);
> >     if (glob)
> >     {
> >     made = JS_NewObject(cx, &global_class, glob, NULL);
> >     if (made)
> >     {
> >     nsresult rv;
> >     nsCOMPtr<nsIXPConnect> xpc = do_GetService("@mozilla.org/js/xpc/
> > XPConnect;1");
> >     if (xpc)
> >     {
> >     nsCOMPtr<nsIXPConnectJSObjectHolder> jshold;
> >     rv = xpc->WrapNative(cx, made, supports, NS_GET_IID(nsISupports),
> > getter_AddRefs(jshold));
>
> > But this always returns NS_ERROR_XPC_BAD_CONVERT_NATIVE. Is this due
> > to making my JSContext incorrectly, or could I be doing something else
> > wrong?
>
> Okay I can answer the first part myself. Turns out the second
> parameter needs to a JSObject that represents scope, and can get
> retrieved using JS_GetScopeChain. With this the NativeWrap works.

Erm, "can answer the *second* part myself". Still wondering about the
first.

_______________________________________________
dev-tech-xpcom mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-xpcom

Reply via email to