当前位置: 首页 > news >正文

logo 在线生成广东网站营销seo费用

logo 在线生成,广东网站营销seo费用,韩国女足出线情况,wordpress 内容 管理了解Firefox插件的开发知识的时候#xff0c;找到了这篇文章。的确让我少走了弯路#xff0c;比如#xff0c;我的NP插件的DLL#xff0c;之前不是NP开头的#xff0c;在此非常感谢原作者#xff0c;您文章让我节约了不少时间。转载传播此文章#xff0c;希望对准备研究…了解Firefox插件的开发知识的时候找到了这篇文章。的确让我少走了弯路比如我的NP插件的DLL之前不是NP开头的在此非常感谢原作者您文章让我节约了不少时间。转载传播此文章希望对准备研究和学习Firefox插件开发的朋友有所帮助。Firefox插件可实现强大功能但其中麻烦事情不少。写这个实用指南首先是为了方便自己记忆免得以后再次栽倒一些坑里面如果能帮助其他人则是更好。这个指南不是为了手把手教读者开发插件而是作为一个FAQ解决各种诡异问题。Firefox拥有众多的扩展(Extension)开发扩展也非常容易不过有一些事情还是无法用扩展解决需要访问操作系统的底层功能这就需要写插件(plugins)。例如flash就是一个插件而不是扩展。Mozilla提供了一系列的教程和文档虽然很不详尽众多重要的API语焉不详但至少是一个好的开始。最需要阅读的是plugins API和使用入门。这是一个相当长的文档如果看完所有的内容会花费大量的时间而且还会很晕这里列一些重点供参考。写第一个插件(只需要关注Writing Plug-ins这一节所谈到的内容)获得一份firefox的源码比如firefox 3.6。plugins的例子可以在源码里找到(modules/plugin/sdk/samples)如果出了问题还可以自己编译一个debug版的firefox来调试。制作插件的安装程序推荐用扩展的方式安装插件有无数的好处完成以上这些内容以后差不多就已经可以实现自己的插件了一般而言参照着例子来做开发不会有什么问题只是有不少细节需要留意。Firefox plugins开发的众多奇怪的约定(假设plugins已经被正确安装)有些约定非常奇怪不要问我为什么天晓得开发firefox的牛人们怎么想的。在Windows下plugins必须满足以下条件才能被firefox检测到插件的名字必须是np*.dll也就是必须以np开头.dll结尾插件dll资源的语言必须为LANG_ENGLISHcode page必须为1252。在rc文件里是这么写的LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252)插件dll的VERSION_INFO里面必须包含以下值VALUE MIMEType, application/x-your-mimetype这个MIME就是标签引用插件的唯一凭证。在Linux下plugins必须满足以下条件才能被检测到插件的名字必须是lib*plugin.so即以lib开头plugin.so结尾插件必须实现NP_GetMIMEDescription和NP_GetPluginVersion并返回合适MIME字符串。注意这个字符串并不是普通的MIME是有特殊规则的详见前面这个链接的内容。插件so不要静态链接gtk、opensll、pthread、z等系统库这会在不同linux平台上因为符号表的问题遇到各种运行时错误特别需要说明的是NP_GetPluginVersion、NP_GetEntryPoints等关键函数没有任何官方文档介绍它们只能根据例子来猜反正没事就别改它们的实现copy例子中的代码就好。firefox插件开发注意事项写firefox插件的一个基本习惯是经常编译代码并运行它保证你的插件还能工作。只要firefox无法加载dll/so或者加载出现任何错误都会悄无声息的忽略这个插件。时常关注一下about:plugins看看插件是不是还在这个列表里。firefox插件从窗口模式上可分为windowless和windowed两种。其中windowless模式的文档较多较全是firefox比较推荐的模式坑比较少这里就不多说了。windowed模式则相反需要好好说说。无论在Windows还是Linux上windowed的插件都拥有独立于浏览器页面的窗口。firefox会通过插件的NPP_SetWindow来告诉插件当前窗口的情况。关于windowed插件有两个诡异问题需要注意Windows平台下插件窗口默认会响应WM_CTLCOLOREDIT、WM_CTLCOLORLISTBOX、WM_CTLCOLORBTN、WM_CTLCOLORSTATIC消息并设置一个默认的背景色。这本来没问题但在Windows XP下这个颜色居然永远是黑色而不是默认系统背景色(通常是白色)。最好subclass这个窗口并且拦截这些消息不要让firefox去处理它们。对于插件来说firefox处理这些消息只是帮倒忙而已。至于firefox还帮了哪些倒忙可以去源码widget/src/windows/nsWindows.cpp的nsWindow::ProcessMessage()去围观。Linux平台下NPP_SetWindow传入的NPWindow指针中虽然有一个ws_info成员这个成员里面也确实有一个display变量指向X Window的Display结构但绝对不要真正使用它否则可能会导致firefox直接退出据说这可能是firefox的一个bug。测试firefox插件小技巧测试方面的高手可以无视测试插件前建议先在firefox里面创建一个新的profile(帐号)。这样可以创造一个最干净的开发环境避免被其他扩展/插件干扰。默认的profile名叫default在命令行里输入firefox -p default就可以使用这个profile。如果只是输入firefox -p会弹出一个对话框用于选择profile。这个命令在Windows和Linux下都可使用。无论是哪个平台调试插件的方法都很类似。Windows下可以用VC以调试方式启动firefox载入插件时调试器会自动载入对应的符号捕捉发生的异常或者设断点都很方便。Linux下直接用gdb就好细节应该不用多说。有一点需要注意系统默认安装的firefox命令(默认放在/usr/bin/firefox)是一个shell脚本真正的可执行文件名字需要打开这个脚本自行查找。实现firefox插件的基本功能firefox为插件提供的接口十分原始很多功能默认没有实现下面提供了一些思路和方法。让插件接受焦点默认情况下标签不能获得焦点必须指定tabindex。在插件中使用tab键跳到下一个element没有好办法必须自己手动将焦点还给浏览器窗口(Linux下不必如此)然后自己用NPN_*系列函数找到应该获得focus的DOM element然后调用这个element的focus()方法。隐藏和显示插件直接设置标签的style.display “none”即可但这里有个严重的副作用firefox会调用插件的NS_PluginShutdown销毁这个插件。如果不期望造成这种效果要么别用这种方式隐藏插件要么把插件状态保存在js里再次显示的时候把状态设回去。触发DOM事件firefox没有提供任何便利的方法触发DOM事件要在插件中做到这点必须自己模拟js触发DOM事件的过程。例如对于HTML事件假设self是DOM elementjs会这么做。evt document.createEvent(KeyboardEvent);evt.initKeyEvent( blur, // in DOMString typeArg,false, // in boolean canBubbleArg,false); // in boolean cancelableArg, self.dispatchEvent(evt);对应的C代码就是void FireHTMLEvent(NPP npp, const string name){NPVariant result;NPObject *window;NPVariant vDoc;NPN_GetValue(npp, NPNVWindowNPObject, window);// 也许页面已经跳转了……if (!window) {return;}NPIdentifier sDocument NPN_GetStringIdentifier(“document”);NPN_GetProperty(npp, window, sDocument, vDoc);NPN_ReleaseObject(window);// evt document.createEvent(“KeyboardEvent”);NPVariant evt;NPObject* npDoc NPVARIANT_TO_OBJECT(vDoc);NPIdentifier createEvent NPN_GetStringIdentifier(“createEvent”);NPVariant eventArgs[1];STRINGZ_TO_NPVARIANT(“HTMLEvents”, eventArgs[0]);NPN_Invoke(npp, npDoc, createEvent, eventArgs, 1, evt);NPN_ReleaseObject(npDoc);// evt.initKeyEvent(//    “blur”,      //  in DOMString typeArg,//    false,            //  in boolean canBubbleArg,//    false);            //  in boolean cancelableArg,NPObject * npEvt NPVARIANT_TO_OBJECT(evt);NPIdentifier initKeyEvent NPN_GetStringIdentifier(“initEvent”);NPVariant initArgs[3];STRINGZ_TO_NPVARIANT(name.c_str(), initArgs[0]);BOOLEAN_TO_NPVARIANT(false, initArgs[1]);BOOLEAN_TO_NPVARIANT(false, initArgs[2]);NPN_Invoke(npp, npEvt, initKeyEvent, initArgs, 3, result);NPN_ReleaseVariantValue(result);// this.dispatchEvent(evt);NPObject * self;NPN_GetValue(npp, NPNVPluginElementNPObject, self);NPIdentifier dispatchEvent NPN_GetStringIdentifier(“dispatchEvent”);NPVariant dispatchArgs[1];dispatchArgs[0] evt;NPN_Invoke(npp, self, dispatchEvent, dispatchArgs, 1, result);NPN_ReleaseVariantValue(result);NPN_ReleaseObject(npEvt);NPN_ReleaseObject(self);}
http://www.zqtcl.cn/news/990172/

相关文章:

  • 电影网站app怎么做的网站关键词是什么
  • 成都做网站建设公司建设网站总结报告
  • 个人网站要备案嘛免费响应式模板网站
  • 淘宝网站内站建设免费个人网站怎么建立
  • 网站运营经验分享ppt沉默是金粤语谐音歌词
  • 建设部网站人员查询wordpress中文 手机版
  • 大港油田建设网站电子商务公司取名字参考大全
  • 贵阳网站建设多点互动wordpress分页出现404
  • wap微信网站模板网站如何做链接
  • 泉州专业网站开发公司怎么免费做公司网页
  • 嵌入式软件开发前景怎么样百度官方优化指南
  • 网站访问速度优化工具网页设计模板图片大全
  • 哪里有手机网站制作公司网页设计与制作心得体会800字
  • 湖南建设厅网站首页简述网站建设的基本思路
  • 蚌埠公司做网站网站开发月薪
  • 怎么更换网站logo推荐几个没封的正能量网站
  • 开网站的宣传图片怎么做php网站建设面试
  • 哪些网站可以下载视频网站建设评价量规
  • 惠州市建设局网站网站模块设计怎么做
  • 群晖可不可以做网站用如何查询商标是否已经被注册
  • 北京欢迎你网站制作公司建设厅和应急管理厅焊工证区别
  • 如何开办网站微信公众平台号申请注册
  • 网站建设找哪个平台浦东区建设工程监督网站
  • 如何创业做网站设计公司工作室
  • 游戏网站建设多少中国煤炭建设协网站
  • 动态图表网站宁津做网站
  • 黑龙江生产建设兵团各连网站成功网站建设案例
  • 一级a做爰精免费网站肇庆网站制作软件
  • wordpress加分页北京优化生育
  • 乐至建设局网站工程项目管理软件哪个好