打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在WebBrowser(WinForm)中执行Javascript(jQuery) | 吃饱了撑着

去年搞的139说客活跃软件,采用WinForm开发,主要通过WebBrowser控件,对139说客的网页进行访问操作,如登录139社区,发说客,拨打G3电话。

之前我一直使用C#对表单元素进行操作,如模拟鼠标点击表单对象获取焦点,给表单对象赋值等等,对于简单的未经Javascript处理的表单对象进行这样的操作问题不大,但当遇到139说客的这个文本框(下图所示)时却不奏效了。

以前我的做法,首先是获取这个文本框对象,然后进行赋值操作,以下是简约后的代码:

HtmlElement txtContent = … //获取文本框对象,这里省略这部分代码
txtContent.InvokeMember(“focus”); //获取焦点,以激活“发布”按钮
txtContent.SetAttribute(“value”,”这里是内容”); //直接给文本框对象赋值

HtmlElement btnSubmit = …;//获取按钮对象,这里省略这部分代码
btnSubmit.InvokeMember(“click”);//点击“发布”按钮

以上代码并不奏效,提示“你啥也没说呀?”,但我保证我说了,文本框已显示了我设置的内容,那问题出在哪里呢?查看这个页面的源代码可以发现,里面有一段针对这个表单的Javascript代码。如果你有耐心的话,或许经过分析这些Javascript后,可以找到问题所在。

我没那耐心呀,于是有了下面的尝试,直接在页面加载一段Javascript代码并执行。

HtmlElement ele = wb.Document.CreateElement(“script”);//wb是控件WebBrowser的名称
ele.SetAttribute(“type”, “text/javascript”);
ele.SetAttribute(“text”, @”var $form = $(‘#rb-talker-form’); var $text = $(‘textarea’, $form); $text.trigger(‘focus’); $text.val(‘这里是内容’);“);
wb.Document.Body.AppendChild(ele);

HtmlElement btnSubmit = …;//获取按钮对象,这里省略这部分代码
btnSubmit.InvokeMember(“click”);//点击“发布”按钮

现在截取其中的Javascript代码即描红部分进行分析,其实它们所做的事情跟前面C#的那段代码差异不大。

var $form = $(‘#rb-talker-form’);
var $text = $(‘textarea’, $form);
$text.trigger(‘focus’);
$text.val(‘这里是内容’);

前面两行是通过jQuery选择器获取文本框对象$text,trigger()是jQuery的方法,模拟用户的操作,如触发click、focus事件。这里的$text.trigger(‘focus’)不仅会触发文本框对象$text绑定的focus事件,也会使文本框本身得到焦点,val()是jQuery的给表单元素赋值的方法。

经过这般更改后,目的达到了:获取文本框焦点的同时激活了“发布”按钮,给文本框赋值后成功发布信息!

写在最后:jQuery并不是本文的重点,但是如果你在进行有关WebBrowser的开发,仅掌握原生的JavaScript已不足已,,因为现在越来越多网站前端都可找到jQuery的踪影了。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
javascript表单之间的数据传递_Javascript教程_www.knowsky....
jQuery登陆判断简单实现代码
jQuery EasyUI ComboGrid 集成分页、按键示例
jquery 按键盘上的enter事件(亲测有效)
PHP教程(43)jQuery介绍+案例
Jquery实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服