转载:https://blog.csdn.net/lengyuezuixue/article/details/79769103

在项目开发过程中遇到一个需求,通过C++调用js方法传参给前端显示图片,但前端如果想显示一个本地绝对路径的一张图片,必须把图片内容转换成base64,原因是浏览器中的JavaScript不能直接直接访问本地资源(例如文件系统,摄像头,麦克风等),除非事先得到了用户的允许,之所以进行该限制也是很有必要的,如果JavaScript能够肆无忌惮的访问本地的文件系统,那么窃取用户隐私数据就变得轻而易举了,当用户访问网络上的某个网页时,不知不觉中自己机器上保存的信用卡卡号,密码,公司的秘密文件等隐私文件或许已经被恶意的JavaScript程序上传到了远方的服务器上,这对用户来说是不可容忍的。

1.簡單的調用js函數的方式:

m_handler->GetBrowser()->GetMainFrame()->ExecuteJavaScript(strJSFuncName, m_handler->GetBrowser()->GetMainFrame()->GetURL(), );

具体调用可以参考我之前关于CEF博客

例如:

frame->ExecuteJavaScript(L"ModifyValue();",frame->GetURL(),);//无参数函数
frame->ExecuteJavaScript(L"ModifyValue('巴萨牛逼');",frame->GetURL(),);//有参数函数
如果参数是可变的,可以这样
CString strJsCode;
strJsCode.Format(L"setInstallStatus('%s','%s','%d');", lpData->strId.c_str(), strStatus, nPercent);
其中setInstallStatus是js函数,它有三个参数

但在具体调用过程中遇到,

感觉是字符串被截断了,没法当成一个js函数调用,然后调试图片转成base64生成的buffer,如下图发现字符串里面很多"\r\n"

应该是"\r\n"这个原因造成的,所以应该把字符串中的"\r\n"过滤掉。

wstring&   replace_all_WString(wstring&   str, const   wstring&   old_value, const   wstring&   new_value)
{
wstring::size_type pos();
while (true) { if ((pos = str.find(old_value, pos)) != wstring::npos)
{
str.replace(pos, old_value.length(), new_value);
pos += new_value.length();
}
else break;
}
return str;
} .... wstring wstrBase64=L"data:image/jpeg;base64,....."; wstrBase64 = replace_all_WString(wstrBase64, L"\r\n", L"");//过滤\r\n

CString strJson;
 strJson.Format(L"ModifyValue('%s');", wstrBase64.c_str());

frame->ExecuteJavaScript(wstrBase64,frame->GetURL(),0);//有参数函数

....

CEF C++调用前端js方法展示传递过来的图片数据的更多相关文章

  1. C#winform中使用Cef的ChromiumWebBrowser内嵌谷歌内核,调用前端js方法

    1.在winform中调用js方法: --调js中的方法无 入参形式 webBrowser1.ExecuteJavascript("logout()"); --调js中的方法给js ...

  2. C#后端调用前端的方法

    在我实际开发过程中,刚好遇到c#后端要调用前端js中的方法,所以研究了一下,特分享如下: 前端代码: <%@ Page Language="C#" AutoEventWire ...

  3. Gridview 行变色和行按钮调用前端js

    1.鼠标移动某一行 ,变色 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Ro ...

  4. .NET混合开发解决方案10 WebView2控件调用网页JS方法

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  5. (转)Silverlight调用的JS方法返回对象数组的处理方法

    最近在做Silverlight应用,需要用Silverlight调用页面中Javascript方法.这 个JS方法返回一个对象数组给Silverlight.对于这个对象数组怎么在Silverlight ...

  6. 子窗体与父窗体调用对方js方法

    有时候为了减少一个页面内的代码量,会将部分内容放到子窗体中,如后台管理中用iframe来进行管理 <div> <iframe id="dviframe" src= ...

  7. C#后台调用前台js方法

    前台js方法(写在head标签之内) <script type="text/javascript" language="javascript"> f ...

  8. 后台调用前台js方法

    后台调用前台jsClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<s ...

  9. js如何展示上传的图片

    前言:本文章主要讲的是上传的图片如何展示在页面上. 一般来说,我们会先将本地图片上传到服务器,上传成功后,由后台返回图片的网络地址再在前端显示.但是,我今天讲的是不通过前面说的过程,而是直接使用js将 ...

随机推荐

  1. Wpf DataGrid 自动滚动到最后一行

    if (mainDataGrid.Items.Count > 0) { var border = VisualTreeHelper.GetChild(mainDataGrid, 0) as De ...

  2. APP偏移地址

    配合BootLoader的APP程序 SCB->VTOR = 0x0803C004; 这里最后还要加上4的原因是 向量表的复位向量地址是4 0地址存的是栈顶

  3. grumphp在docker里问题

    .git/hooks/commit-msg .git/hooks/pre-commit 这两个文件的路径指向为docker环境下,如果在容器外执行提交会发现找不到路径,所以要修改这两个文件的路径为容器 ...

  4. python webbrowser模块(浏览器操作)

    webbrowser模块提供了一个高级接口来显现基于Web的文档,大部分情况下只需要简单的调用open()办法. webbrowser定义了如下的反常: exception webbrowser.Er ...

  5. python一次性解压多层嵌套zip压缩包

    zip包里的结构不是固定的,有可能只需要解压一次就完成了,有可能解压后里面还存在zip文件,需要继续进行解压缩 写了个简单的递归函数来实现解压非固定结构zip包,若解压后的zip子目录下仍含有zip文 ...

  6. 4.hadoop的安装与配置

    1.下载hadoop-2.6.2.tar.gz. 2.复制hadoop-2.6.2.tar.gz到/usr/local/目录下. 3解压 #tar  -zxvf  hadoop-2.6.2.tar.g ...

  7. linux touch命令 创建文件

    touch 创建文件,用法,touch test.txt,如果文件存在,则表示修改当前文件时间 [root@MongoDB ~]# touch /data/text.txt [root@MongoDB ...

  8. JavaScript 里 var a =a ||{}

    首先,搞明白||的意思. 1.在js里面,||运算符,比如(A||B)有个很有意思的用处: 2.系统先判断A表达式的布尔值,是真是假.如果为真,直接返回A.如果为假,直接返回B(不会判断B是什么类型) ...

  9. DAX/PowerBI系列 - 玩转阿里云 Alicloud Pricing

    DAX/PowerBI系列 - 玩转 阿里云主机 Ali Cloud ECS 难度: ★★☆☆☆(1星) 适用范围: ★★★☆☆(3星) 欢迎交流与骚扰 这是啥: 双十一就到了,码农门,程序猿们有没有 ...

  10. nginx中的超时设置,请求超时、响应等待超时等

    nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响 ...