CefGlue中js与C#交互(实现mp3播放)
一、C#调用js
1.通过CefFrame.ExecuteJavaScript(string code, string url, int line)方法执行JS
private void browser_LoadEnd(object sender, Xilium.CefGlue.WPF.LoadEndEventArgs e)
{
browser.ExecuteJavaScript("window.iscef = true;", browser.GetCefBrowser().GetMainFrame().Url, );
}
2.通过CefV8Value.ExecuteFunction或CefV8Value.ExecuteFunctionWithContext执行
二、js调用C#
1.定义DemoRenderProcessHandler,继承自CefRenderProcessHandler,重写OnWebKitInitialized事件,根据实际情况,人工手写JS脚本代码,通过官方提供的RegisterExtension(string extensionName, string javascriptCode, CefV8Handler handler)方法进行注册:
public class DemoRenderProcessHandler : CefRenderProcessHandler
{
private TGCefV8Handler tgCefV8Handler;
protected override void OnWebKitInitialized()
{
tgCefV8Handler = new TGCefV8Handler(); const string exampleAJavascriptCode = @"function tgCefV8Handler() {}
if (!tgCefV8Handler) tgCefV8Handler = {};
(function() {
tgCefV8Handler.playMp3 = function(arg0) {
native function PlayMp3(arg0);
return PlayMp3(arg0);
};
})();"; CefRuntime.RegisterExtension("exampleAExtensionName", exampleAJavascriptCode, tgCefV8Handler); base.OnWebKitInitialized();
}
}
2.定义一个CefV8Handler,继承自CefV8Handler,在ExampleAv8Handler里的Execute事件中,写你要执行的操作代码,下面代码中的JSFunc.PlayMp3表示一个播放mp3的函数
public class TGCefV8Handler : CefV8Handler
{
/// <summary>
/// 默认构造函数
/// </summary>
public TGCefV8Handler()
{
} protected override bool Execute(string name, CefV8Value obj, CefV8Value[] arguments, out CefV8Value returnValue, out string exception)
{
string result = string.Empty; switch (name)
{
case "PlayMp3":
result = JSFunc.PlayMp3(arguments[].GetStringValue());
break;
default:
break;
} returnValue = CefV8Value.CreateString(result);
exception = null;
return true;
}
}
3.在CefApp中重写GetRenderProcessHandler方法:
internal sealed class SampleCefApp : CefApp
{
public SampleCefApp()
{
} private CefRenderProcessHandler _renderProcessHandler = new DemoRenderProcessHandler(); protected override void OnBeforeCommandLineProcessing(string processType, CefCommandLine commandLine)
{
if (string.IsNullOrEmpty(processType))
{
commandLine.AppendSwitch("disable-gpu");
commandLine.AppendSwitch("disable-gpu-compositing");
commandLine.AppendSwitch("enable-begin-frame-scheduling");
commandLine.AppendSwitch("disable-smooth-scrolling");
}
} protected override CefRenderProcessHandler GetRenderProcessHandler()
{
return _renderProcessHandler;
}
}
4.最后在js中调用方式为:
var msg = window.tgCefV8Handler.playMp3(url);
CefGlue中js与C#交互(实现mp3播放)的更多相关文章
- CEF3开发者系列之外篇——IE中JS与C++交互
使用IE内核开发客户端产品,系统和前端页面之间的交互,通常给开发和维护带来很大的便利性.但操作系统和前端之间的交互却是比较复杂的.具体来说就是脚本语言和编译语言的交互.在IE内核中html和css虽然 ...
- UIWebView中JS与OC交互 WebViewJavascriptBridge的使用
一.综述 现在很多的应用都会在多种平台上发布,所以很多程序猿们都开始使用Hybrid App的设计模式.就是在app上嵌入网页,只要写一份网页代码,就可以跑在不同的系统上.在iOS中,app多是通过W ...
- Android 中 js 和 原生交互
Android中的WebView 中加载的URL 默认是在手机浏览器中加载的,我们可以覆盖这种默认的动作,让网页在WebView中打开.通过设置WebView的WebViewClent 达到这个效果. ...
- CEF3开发者系列之JS与C++交互之一
JS与Native交互是相对于比较困难的技术,在学习这门技术之前,我们先了解下浏览器内核中的JS引擎与chromium内核的V8引擎相关知识.在浏览器应用中,JS与本地代码互相调用,得益于浏览器内核对 ...
- JS 与Flex交互:html中的js 与flex中的actionScript通信
Flex与JavaScript交互的问题,这里和大家分享一下,主要包括Flex调用JavaScript中的函数和JavaScript调用Flex中的函数两大部分内容. Flex 与JavaScript ...
- js与native交互
js与native交互 UIWebView Native调用JS,使用stringByEvaluatingJavaScriptFromString来解释执行js脚本. //script即为要执行的js ...
- CEF3开发者系列之JS与C++交互之二
本文翻译自JavaScriptIntegration (https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration).本 ...
- js与C++交互及C++解析json
转载:http://zhidao.baidu.com/link?url=LLuWzwMmpfVcQeSGv1CrAfRXpnZaetm9xypqwMW6zxLhhKES-rITAsG0-Ku-bSMA ...
- 前端页面js与flash交互——js获取flash对象,并传递参数
背景介绍: 最近在搞一个项目,涉及到图片选取,裁剪,上传等,由于浏览器安全性问题,js无法获取到<input type="file">中选取的文件路径,而且对照片的裁剪 ...
随机推荐
- Centos安装Oracle及问题处理
安装Oracle前准备 创建运行oracle数据库的系统用户和用户组 [jonathan@localhost ~]$ su root #切换到root Password: [root@localhos ...
- generatorConfiguration详解
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration ...
- bootloader研究最后一关(上)
2011-03-12 17:03:17 把map文件也仔细看了下.代码及map文件及段分配的关系,可以参考我总结的图.暂时堆栈我就不放在ZI上了.不是今天的重了点 今天重点研究2440的nandfla ...
- ltp-ddt inverted_return小trick
./runtest/ddt/i2c_readwrite # @name I2C write read test on slave device# @desc I2C write read test o ...
- 1.1:Get Started with Unity Shaders
文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 第1章开始正式进入Unity Shader的学习. 什么是Shader 本 ...
- 4、Kafka命令行操作
Kafka命令行操作 1)查看当前服务器中的所有topic [test@ip101 kafka]$ bin/kafka-topics.sh --zookeeper ip101:2181 --list ...
- Shell 解释器初识
1.脚本文件要以.sh结尾,第一行要跟#!/bin/bash解释器. 2.运行shell脚本. (1)添加权限:可以加x执行权限,./123.sh (2)命令执行:bash 123.sh,sh 123 ...
- Linux 查看内存状态
# 查看系统内存 命令:free 注:默认k单位显示 注:-m 以MB 注:-g以GB 单位显示 total used free shared buffers cached Mem: -/+ buff ...
- Oracle 11gR2 用户重命名(rename user)
Oracle 11.2.0.2里新增了一个新特性——用户重命名(Rename User),在这个版本之前要想重命名用户,需要按用户导出,再fromuser touser(imp)或remap_sc ...
- Git冲突和解决冲突-测试方法
原文链接:https://www.cnblogs.com/blogslee/p/6828659.html