闲话少说,网上也有很多的开发过程介绍,感兴趣的,可以自己去看看。
开发之前,先要备齐:mozilla-win32-1.7 或者firefox-4.0.1.source 具体地址在其官网,自己找找,然后下载npruntime 开发实例。
我们需要的就是修改它就可以了,当然你也可以自己新建项目,然后导入也是Ok的。然后我们导出附加头文件 以VS 2010为例 右击“项目”, 选择“属性”,---->C/C++/常规,你会看到有一个附加包含目录,在此点选,找到你下载的API文件的路径。例如:D:\Download\xulruner-sdk\include;这个是我的路径。
依旧再此目录下,设置 “预编译头” -------“不使用预编译头”;
在“配置属性”------->常规---我们可以设置输出目录为我们forefox的安装路径下的plugins目录下(如果没有,可以手动新建的,文件夹名字也写对)。
设置C/C++ 下的于处理器 下的预处理器定义,设置为:WIN32 ,NDEBUG,XP_WIN,_WINDOWS,_USRDLL,NPRT_EXPORTS,XP_COM_GLUE,_X86_,MOZILLA_STRICT_API.这样就OK啦,可以编译生成***.dll 啦,然后打开测试的网页。
附录测试网页源码:
<HTML>
<HEAD>
</HEAD>
<script>
function GetVersion(){
try
{
var PLUGIN = document.getElementById('plugin');
alert(PLUGIN);
alert( "Version from plugin: " + PLUGIN.sPluginType_id );
}
catch (err)
{
alert(err);
}
}
</script>
<BODY>
<embed type="application/nprt" width = 100 height = 100 />
<hr/>
<br>
<input type="button" value="GetVersion" οnclick="GetVersion()"/>
<hr>
<br>
</BODY>
</HTML>
添加我们自己的属性或者方法,可以在ScriptablePluginObject 里面的HasMethod 里面,例如:
if( !strcmp( "Add", pFunc ) )
{
return true;
}
添加一个Add 函数,函数的实现 我们放在 Invoke 里面实现 ,即可 例:
if( !strcmp( "Add", pFunc ) )
{
int sum = 0;
for( unsigned int i = 0; i < argCount; i++ )
{
if( args[i].type == NPVariantType_Int32 )
{
sum += args[i].value.intValue;
}
else if( args[i].type == NPVariantType_String )
{
CNPString s(args[i].value.stringValue);
sum += atoi( s );
}
else return false;//an error happenend
}
INT32_TO_NPVARIANT( sum,*result);
return true;
}
这样就OK啦。` 之于在JS中的调用,很简单的,获得控件ID ,然后调用 PLUGIN .Add() 即可。
之于属性的话,参见他的GetVersion即可。~~