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.
_______________________________________________
dev-tech-xpcom mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-xpcom