Bholley,
Thanks for your quick response. Sorry for being naive and I am a newbee in this
area. After modifying the IDL and jsXPCOM as below, my question now is "How to
call the injected or page java scripts by using nsIDOMWindow"?
1 - My modified IDL
#include "nsISupports.idl"
[scriptable, uuid(f22e7808-17a7-11e4-9620-58fc1d5d46b0)]
interface nsIJSSupport: nsISupports
{
boolean doSomething(in nsIDOMWindow gdomwindow, in string
siteId,in bool bRescanPage, in bool bIsFF30orGreater);
};
2 - My modified 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(gdomwindow, siteId, bPage, bIsGreater) {
//win.wrappedJSObject.injectedJSFunctioninWebPage(gdomwindow, siteId, bPage,
bIsGreater);
//How to call the injected or page java scripts by using nsIDOMWindow??
}
}
Thanks for pointing me in right direction.
Shan'
On Wednesday, July 30, 2014 9:36:18 PM UTC+5:30, Bobby Holley wrote:
> On Wed, Jul 30, 2014 at 8:56 AM, Shanmugham Sundaram
> > 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
[email protected]
https://lists.mozilla.org/listinfo/dev-platform