在研发ZCMS系统过程中,我们发现很多用户在上传截图时,需要先另存为图片文件然后再选择上传,过程操作复杂。于是我们想通过用户直接粘贴图片到编辑器并上传。要实现这一功能必须实现获取用户剪切板中的图片数据并保存到本地。浏览器本身没有相应的功能,因此我们考虑到用浏览器插件的方式实现。为了兼容各个浏览器,我们选择了frirebreath,实现插件在不同浏览器的通用。
首先介绍一下FireBreath。FireBreath 旨在提供一个跨平台支持的浏览器插件体系架构,面向:
- NPAPI 浏览器(windows, mac, and linux):
- Gecko/Firefox
- Google Chrome
- Apple Safari
- ActiveX 架构:
- Microsoft Internet Explorer 6, 7, and 8,9,10,11
下面将分步介绍开发过程。
1.下载最新的FireBreath代码 http://www.firebreath.org/display/documentation/Download
2.下载安装python 2.7 https://www.python.org/downloads/release/python-278/
3.解压FireBreath,并进入目录运行 python fbgen.py
运行后目录下将生成project目录,并生成相应的文件夹生成后,运行相应的prep*.cmd,比如prep2008.cmd,将生成适应vs2008版本的工程文件
4.打开sln文件
工程中生成了相应的npapi和activex的代码,主要修改对应项目名称目录下的文件即可。
其中***API.cpp和***API.h中定义了相关的示例方法,比如echo方法,我们可以直接编译。对应目录下会生成对应的np***.dll文件。我们可以打开FBControl.htm进行测试。在测试之前,需要注册到浏览器中,firefox和chrome需要通过注册表注册找到HKEY_LOCAL_MACHINE\Software\MozillaPlugins\ ,添加@zvingsoft/ZCMSPastePlugin,并设置path description,以及MimeTypes
在firefox和chrome地址栏中输入 about:plugins查看对应的插件是否已经成功安装
可以打开FBControl.htm进行测试
注意:在ie中需要通过regsvr32对dll注册
5.在***API.h和***API.cpp文件中增加图片保存方法
***API.h
//注册方法暴露到js方法中调用 registerMethod("saveClipImage", make_method(this, &ZCMSPastePluginAPI::saveClipImage)); ...... FB::variant saveClipImage(); // Event helpers FB_JSAPI_EVENT(test, 0 FB_JSAPI_EVENT(saveClipImage, 0, ());
***API.cpp
FB::variant ZCMSPastePluginAPI::saveClipImage() { if (!OpenClipboard(NULL)) return ""; HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP); CloseClipboard(); //HWND hWnd = GetDesktopWindow(); if (hBitmap == NULL) return ""; CImage image; image.Attach(hBitmap); TCHAR OutPath[MAX_PATH]; int StrLen = GetTempPath(MAX_PATH, OutPath); CString str = CString((LPCTSTR)OutPath) + CString(_T("zcmspaste.png")); image.Save((LPCTSTR)str, Gdiplus::ImageFormatPNG); // return "foobar"; return str; }
通过js调用相关方法
function saveClipImage() { if(plugin().valid){ var path = plugin().saveClipImage(); if(!path){ alert("剪贴板中没有图片"); }else{ alert("图片已保存:"+path); document.getElementById("test").src = path; } } else { alert("Plugin is not working :("); } }
6.为了能够让用户直接使用,建议使用innosetup制作安装文件,下面示例中将dll进行注册,并加入到注册表。
[Files] Source: "G:\FireBreath1.7\build\bin\ZCMSPastePlugin\Debug\npZCMSPastePlugin.dll"; DestDir: "{app}"; Flags: regserver restartreplace noregerror replacesameversion uninsnosharedfileprompt sharedfile ignoreversion [Registry] Root: HKLM; Subkey: Software\MozillaPlugins\@zvingsoft/ZCMSPastePlugin; ValueType: string; Flags: uninsdeletekey Root: HKLM; Subkey: Software\MozillaPlugins\@zvingsoft/ZCMSPastePlugin; ValueName: Path; ValueData: {app}\npZCMSPastePlugin.dll; ValueType: string Root: HKLM; Subkey: Software\MozillaPlugins\@zvingsoft/ZCMSPastePlugin; ValueName: Description; ValueData: ZCMS paste image Plugin; ValueType: string Root: HKLM; Subkey: Software\MozillaPlugins\@zvingsoft/ZCMSPastePlugin\MimeTypes; ValueType: string; Flags: uninsdeletekey Root: HKLM; Subkey: Software\MozillaPlugins\@zvingsoft/ZCMSPastePlugin\MimeTypes\application/x-zcms-paste-plugin; ValueType: string; Flags: uninsdeletekey
相关推荐
跨浏览器插件框架FireBreath安装与使用之一——Windows下的插件
跨浏览器插件框架FireBreath安装与使用之Mac下的插件
前面简单介绍了浏览器,后面介绍了firebreath的环境搭建,创建一个浏览器插件,以及在firebreath中如何使用win32API。
针对目前视频监控系统的浏览器插件与非IE内核的浏览器不兼容的问题,本文采用基于FireBreath开发框架开发跨浏览器插件系统的方法,使浏览器插件可以运行在不同系统平台的多种浏览器上。该插件不仅支持由ActiveX 架构...
FireBreath是一个跨平台和跨浏览器的插件开发框架,通过Firebreath写的插件可以运行在windows,linux和mac上的IE,Firefox,Chrome,Opera,Safari等浏览器上。 FireBreath的主要开发者是Richard Bateman, 他...
FireBreath是一个跨平台的浏览器插件框架。 它在Windows,Mac OS X和Linux(可能还有其他的Unix衍生物)上支持ActiveX和NPAPI。 获取来源 签出源代码后,请确保运行: git submodule update --init --...
在使用fireBreath开发跨浏览器插件的过程中,遇到插件接口参数或返回值中文乱码的问题,于是想起采用Base64先编码,到插件函数内再解码的方法。 包含3个文件base64.h,Base64.cpp,base64.js
windwos下使用firebreath框架实现插件的整个过程文档整理。 文档包含: 1. firebreath---环境的搭建 2. firebreath---创建plugin插件 3. firebreath---在插件中实现功能 4. firebreath---插件的调试方法 5. ...
3、 下面那一种开发方向不属于Java定义的? C A、 JavaSE B、 Java EE C、 JavaCE D、JavaME 3、判断题 1、 Java语言属于编译型的开发语言。 ( × ) 2、 Java Application程序不是由main()方法开始执行的。 ( ...
activex 只支持windows 嫡系浏览器ie,对于一些国产浏览器,activex无能为力,npapi理论上支持大多数浏览器,但是其实现接口比较复杂,firebreath可以很简单的搭建npapi框架,大家只要在框架上实现自己的接口就ok了...
firebreath1.7.0
firebreath工具,懒人专用包,含cmake-2.8.11.2-win32-x86.exe,firebreath-boost-1.50.0.zip,firebreath-FireBreath-firebreath-1.7.0-12-g105dcc6.zip,python-2.7.5.msi
Firebreath-1.70源码工程文件
代码完整,开发框架需要自己搭建 bool hest::onMouseMove(FB::MouseMoveEvent *evt, FB::PluginWindow *win) { //printf("Mouse move at: %d, %d\n", evt->m_x, evt->m_y); m_mousePosXnew=evt->m_x,m_...
firebreath环境搭建,创建了一个调用js函数的例子,以及代码如何管控,毕竟firebreath的源码没必要维护,只需要维护自己的工程代码
生成网页控件必须的资源,fireabreath需要的boost库
包含FireBreath入门及一个多线程及调用JS例子(生成FireBreath项目时会直接把这两个例子加进去)
火息主页: : FireBreath 是一个跨平台的浏览器插件框架。 它支持 Windows、Mac OS X 和 Linux(可能还有其他 unix 衍生版本)上的 ActiveX 和 NPAPI。获取源检查源代码后,请确保运行: git submodule update --...
使用firebreath开发Npapi Activex控件,实现的功能是使用libcurl下载文件到本地,在html页面显示下载进度的功能