在研发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 框架非常有价值和实用。 FireBreath 框架的使用需要以下几个步骤: 1. 安装 Cygwin,这是一个Windows上的 Unix 模拟环境,可以模拟 Unix 环境,使得开发者可以在 Windows ...
标题“firebreath开发NPAPI插件”指的是利用FireBreath库来构建NPAPI插件的过程。FireBreath提供了一个C++的接口,简化了与浏览器交互的复杂性,同时支持Windows和Mac OS X等操作系统。 描述中提到的“浏览器插件...
FireBreath是一款强大的跨浏览器插件开发框架,它允许开发者使用C++来编写兼容各种主流浏览器(包括IE、Firefox、Chrome、Safari和Opera)的插件。该框架提供了一套丰富的API,简化了插件开发过程中的复杂性,使...
针对目前视频监控系统的浏览器插件与非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
FireBreath是一个开源的、跨平台的...通过阅读源码、构建和运行示例,你可以深入了解FireBreath 1.7.0的内部工作机制,以及如何利用它来开发浏览器插件。同时,记得查阅官方文档以获取完整的更新日志和详细的使用指南。
FireBreath是一个开源的框架,专门用于构建跨浏览器的插件。它允许开发者使用C++编写插件,然后在Firefox、Chrome、Safari等主流浏览器上运行。"FireBreath_多线程及调用JS例子"这个压缩包显然包含了关于如何在...
windwos下使用firebreath框架实现插件的整个过程文档整理。 文档包含: 1. firebreath---环境的搭建 2. firebreath---创建plugin插件 3. firebreath---在插件中实现功能 4. firebreath---插件的调试方法 5. ...
FireBreath是一个开源的C++库,用于构建跨平台的浏览器插件,它允许开发者用C++编写插件,同时可以方便地与JavaScript交互。在"firebreath source control and how to call js function"这个主题中,我们将深入探讨...
FireBreath是一个开源的框架,用于创建浏览器插件,它结合了C++和JavaScript的强大力量,使得开发者能够方便地构建跨平台的浏览器扩展。"firebreath-1.7.0-12"是FireBreath的一个特定版本,表明这个版本已经经过测试...
它使得开发者能够利用C++编写插件,并且在多种浏览器和操作系统上运行。在FireBreath项目中,Boost库是一个关键的依赖,因为它提供了一系列的C++库来增强标准库的功能,为开发高质量、高性能的应用程序提供了强大...
7. **开发工具**:开发NPAPI插件时,开发者通常会用到如NPAPI SDK、FireBreath等工具集,这些工具可以帮助构建和调试插件。对于Chrome扩展,Chrome开发者工具是必备的调试工具。 8. **兼容性**:NPAPI插件的跨平台...
4. 跨浏览器插件构建工具 FireBreath:FireBreath 是一个开源的跨浏览器插件构建工具,提供了高性能的跨浏览器插件编程解决方案。 5. 跨平台项目构建工具 CMake:CMake 是一个开源的跨平台项目构建工具,提供了高...
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了...
在IT行业中,构建跨平台浏览器插件是一项挑战性任务,而`FireBreath`是一个强大的开源框架,专门用于创建NPAPI(Netscape Plugin Application Programming Interface)和ActiveX控件。`FireBreath`简化了这个过程,...
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