On Wed, Jul 30, 2014 at 8:56 AM, Shanmugham Sundaram <shansyman...@gmail.com
> wrote:

> 1 - My IDL is as follows
>                #include "nsISupports.idl"
>                [scriptable, uuid(f22e7808-17a7-11e4-9620-58fc1d5d46b0)]
>                interface nsIJSSupport: nsISupports
>                {
>                  boolean doSomething(in string frameId, in string
> siteId,in bool  bPage, in bool bIsGreater);
>                };
>
>
> 2 - My JS file is as follows
>
>
> Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
>
>                function MyComponent() { }
>
>                MyComponent.prototype = {
>                  classDescription: "Shans Javascript XPCOM Component",
>                  classID:
>  Components.ID("{17ca79ee-17ae-11e4-a5ea-fa011e5d46b0}"),
>                  contractID:       "@Shans.com/jssource;1",
>                  QueryInterface:
> XPCOMUtils.generateQI([Components.interfaces.nsIJSSupport,Components.interfaces.nsISupports]),
>
>                doSomething: function(frameId,  siteId, bPage, bIsGreater) {
>                                              //Get the proper window and
> get the call to sb_MyComponent
>                                              //assuming the following will
> call the "sb_MyComponent"
>
>  win.wrappedJSObject.injectedFunctioninWebPage(frameId,  siteId, bPage,
> bIsGreater);
>                               }
>                }
>
>                var components = [MyComponent];
>
>                if ("generateNSGetFactory" in XPCOMUtils)
>                  var NSGetFactory =
> XPCOMUtils.generateNSGetFactory(components);
>                else
>                  var NSGetModule =
> XPCOMUtils.generateNSGetModule(components);
>
>
>
> 3 - My C++ XP-COM code (skeleton) to make JS-XPCOM call as below :
>
>                nsresult rv;
>                nsCOMPtr<nsIDOMWindow> aDOMWindow( do_GetInterface(
> aWebProgress, &rv ) );
>                nsCOMPtr< nsPIDOMWindow > privateWindow( do_QueryInterface(
> aDOMWindow, &rv ) );
>                nsCOMPtr< nsIDocShell > docShell =
> privateWindow->GetDocShell();
>                                 nsCOMPtr<nsIJSSupport> iJSSupport =
> do_CreateInstance("@Shans.com/jssource;1",&rv);
>                if(NS_SUCCEEDED(rv) && iJSSupport)
>                  {
>                           iJSSupport-> doSomething (frameId,  siteId,
> bPage, bIsGreater)
>                                 }
>
>
> Is it possible to call the "injectedFunctioninWebPage()" by using
> win.wrappedJSObject ? If not, how to call the JS functions  in the page by
> using JS-XPCOM?
>

Yes. You might consider passing aDOMWindow directly through the IDL since
you already have it in C++, rather than using the frameId.

bholley
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to