利用firebreath开发跨浏览器插件
- - 开源软件 - ITeye博客在研发ZCMS系统过程中,我们发现很多用户在上传截图时,需要先另存为图片文件然后再选择上传,过程操作复杂. 于是我们想通过用户直接粘贴图片到编辑器并上传. 要实现这一功能必须实现获取用户剪切板中的图片数据并保存到本地. 浏览器本身没有相应的功能,因此我们考虑到用浏览器插件的方式实现. 为了兼容各个浏览器,我们选择了frirebreath,实现插件在不同浏览器的通用.
在研发ZCMS系统过程中,我们发现很多用户在上传截图时,需要先另存为图片文件然后再选择上传,过程操作复杂。于是我们想通过用户直接粘贴图片到编辑器并上传。要实现这一功能必须实现获取用户剪切板中的图片数据并保存到本地。浏览器本身没有相应的功能,因此我们考虑到用浏览器插件的方式实现。为了兼容各个浏览器,我们选择了frirebreath,实现插件在不同浏览器的通用。
首先介绍一下FireBreath。FireBreath 旨在提供一个跨平台支持的浏览器插件体系架构,面向:
下面将分步介绍开发过程。
1.下载最新的FireBreath代码 http://www.firebreath.org/display/documentation/Download
2.下载安装python 2.7 https://www.python.org/downloads/release/python-278/
//注册方法暴露到js方法中调用
registerMethod("saveClipImage", make_method(this, &ZCMSPastePluginAPI::saveClipImage));
......
FB::variant saveClipImage();
// Event helpers
FB_JSAPI_EVENT(test, 0
FB_JSAPI_EVENT(saveClipImage, 0, ());
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;
}
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 :(");
}
}
[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