зеркало из https://github.com/mozilla/gecko-dev.git
[not part of build] 2-way plugin scripting example.
This commit is contained in:
Родитель
49d3ea3722
Коммит
9821ea06fe
|
@ -22,10 +22,14 @@
|
|||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface acmeIScriptObject;
|
||||
|
||||
[scriptable, uuid(482e1890-1fe5-11d5-9cf8-0060b0fbd8ac)]
|
||||
interface nsI4xScriptablePlugin : nsISupports {
|
||||
void showVersion();
|
||||
void clear();
|
||||
|
||||
readonly attribute string version;
|
||||
|
||||
void setWindow(in acmeIScriptObject window);
|
||||
};
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
// be callable from JavaScript
|
||||
//
|
||||
#include "plugin.h"
|
||||
#include "acmeIScriptObject.h"
|
||||
#include "npapi.h"
|
||||
|
||||
static NS_DEFINE_IID(kI4xScriptablePluginIID, NS_I4XSCRIPTABLEPLUGIN_IID);
|
||||
static NS_DEFINE_IID(kIClassInfoIID, NS_ICLASSINFO_IID);
|
||||
|
@ -54,8 +56,9 @@ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
|||
|
||||
nsScriptablePeer::nsScriptablePeer(CPlugin* aPlugin)
|
||||
{
|
||||
mPlugin = aPlugin;
|
||||
mRefCnt = 0;
|
||||
mPlugin = aPlugin;
|
||||
mWindow = nsnull;
|
||||
}
|
||||
|
||||
nsScriptablePeer::~nsScriptablePeer()
|
||||
|
@ -133,3 +136,33 @@ NS_IMETHODIMP nsScriptablePeer::GetVersion(char * *aVersion)
|
|||
mPlugin->getVersion(aVersion);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsScriptablePeer::SetWindow(acmeIScriptObject *window)
|
||||
{
|
||||
NS_IF_ADDREF(window);
|
||||
NS_IF_RELEASE(mWindow);
|
||||
mWindow = window;
|
||||
|
||||
// evaluate a JavaScript expression.
|
||||
acmeIScriptObject* result;
|
||||
nsresult rv = window->Evaluate("Math.PI", &result);
|
||||
if (NS_SUCCEEDED(rv) && result) {
|
||||
double value;
|
||||
result->ToNumber(&value);
|
||||
NS_RELEASE(result);
|
||||
}
|
||||
|
||||
// read the current window's location.
|
||||
acmeIScriptObject* location = nsnull;
|
||||
rv = window->GetProperty("location", &location);
|
||||
if (NS_SUCCEEDED(rv) && location) {
|
||||
char* locationStr = NULL;
|
||||
rv = location->ToString(&locationStr);
|
||||
if (NS_SUCCEEDED(rv) && locationStr) {
|
||||
NPN_MemFree(locationStr);
|
||||
}
|
||||
NS_RELEASE(location);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -100,6 +100,7 @@ public:
|
|||
|
||||
protected:
|
||||
CPlugin* mPlugin;
|
||||
acmeIScriptObject* mWindow;
|
||||
};
|
||||
|
||||
#endif
|
Загрузка…
Ссылка в новой задаче