如何用c#本地代码实现与Webbrowser中的JavaScript交互
2014-12-13 15:33
232 查看
关键词:.Net,Webbrowser,JavaScript,communication
参考:
链接:msdn实例-简单的相互调用代码:
[PermissionSet(SecurityAction.Demand, Name="FullTrust")] [System.Runtime.InteropServices.ComVisibleAttribute(true)] public class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { webBrowser1.AllowWebBrowserDrop = false; webBrowser1.IsWebBrowserContextMenuEnabled = false; webBrowser1.WebBrowserShortcutsEnabled = false; webBrowser1.ObjectForScripting = this; // Uncomment the following line when you are finished debugging. //webBrowser1.ScriptErrorsSuppressed = true; webBrowser1.DocumentText = "<html><head><script>" + "function test(message) { alert(message); }" + "</script></head><body><button " + "onclick=\"window.external.Test('called from script code')\">" + "call client code from script code</button>" + "</body></html>"; } public void Test(String message) { MessageBox.Show(message, "client code"); } private void button1_Click(object sender, EventArgs e) { webBrowser1.Document.InvokeScript("test", new String[] { "called from client code" }); } }
链接0:codeproject中VB和js的交互
链接1:自定义数据类型的参数传递
代码:
dynamic data = webBrowser1.Document.InvokeScript("eval", new[] { "(function() { return { latitude: 1, longitude: 2 }; })()" }); MessageBox.Show("Data: " + data.latitude + ", " + data.longitude);
链接:添加js到已加载的网页
代码:
private void addScript(HtmlElement head, string scriptSource) { HtmlElement lhe_script = head.Document.CreateElement("script"); IHTMLScriptElement script = (IHTMLScriptElement)lhe_script.DomElement; script.src = scriptSource; head.AppendChild(lhe_script); } addScript(Webbrowser.Head, @"<Change File Path here>jquery.min.js"); addScript(WebBrowser.Head, @"InjectMonitor.js");
Selenium则是一个利用http协议,来实现js和其他语言之间的通信,他强大的地方是js部分。
ide/main/src/content/selenium-runner.js
// overide _executeCurrentCommand so we can collect stats of the commands executed _executeCurrentCommand : function() { /** * Execute the current command. * * @return a function which will be used to determine when * execution can continue, or null if we can continue immediately */ var command = this.currentCommand; LOG.info("Executing: |" + command.command + " | " + command.target + " | " + command.value + " |"); var handler = this.commandFactory.getCommandHandler(command.command); if (handler == null) { throw new SeleniumError("Unknown command: '" + command.command + "'"); } command.target = selenium.preprocessParameter(command.target); command.value = selenium.preprocessParameter(command.value); LOG.debug("Command found, going to execute " + command.command); updateStats(command.command); this.result = handler.execute(selenium, command); this.waitForCondition = this.result.terminationCondition; },
selenium-api,
CommandHandlerFactory是Api核心,在
selenium-api.js,
selenium-commandhandlers.js文件中实现。
相关文章推荐
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现) .
- asp.net C#如何实现当地时区转换的代码实例
- 如何在C#代码中实现在Sqlserver2000中添加用户?以及附加数据库?
- C# 如何获取本地数据库SQL Server的数据库服务器名称和数据库名称?然后连接,代码怎么写?
- C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)
- .net c# gif动画如何添加图片水印实现思路及代码学习
- c# .net中如何实现图片防盗链功能的代码实例
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)
- 用 C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠
- VS C# .NET WebBrowser控件 利用插入JS代码,实现控制弹出IE窗口
- SkylineGlobe 6.5 如何实现简单多边形的动态绘制 C#示例代码
- .net c# gif动画如何添加图片水印实现思路及代码
- .net c# gif动画如何添加图片水印实现思路及代码
- 【Java学习之旅】——Java如何实现像c#的#region实现代码折叠
- C# 如何使用代码实现打开文件夹
- C#如何不使用递归实现无限层次结构的代码分享[转]
- 如何用C#代码实现:设置系统日期格式、取硬盘的编号、取CPU编号
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)