现在很多软件都做成了内嵌浏览器的形式vs中的webbrwser控件即可以实现此功能当然不能说中的webbrowser是个新东西他只不过将以前的msthml做了一次不完全封装姑且不论其封装的如何至少我们在使用它时不需要向以前一样频繁的调用令人讨厌的IHTMLDocumentIHTMLDocumentIHTMLDocumentIHTMLDocument而且新版的webbrowser是线程安全的!这点最重要
以下代码片段均摘自我的一个项目
下面看看webbrowser如何调用调用页面里的Javascript
C#段
代码
void ShowTable(string sid) {
SetWebBorserSafe(webBrowser Showdisplay sid);
}
public void SetWebBorserSafe(object ostring sstring tag)//保证线程安全
{
if (o == webBrowser)
{
if (thiswebBrowserInvokeRequired)
{
BeginInvoke(new SetWebBroserCallback(SetWebBorserSafe) new object[] { webBrowser s tag });
}
else
{
webBrowserDocumentInvokeScript(s new String[] { tag});
}
}
}
去掉干扰代码其实最关键的代码是
webBrowserDocumentInvokeScript(s new String[] { tag});
JavaScript段
function Showdisplay(id) {
if (documentgetElementById(id)) {
var traget = documentgetElementById(id);
tragetstyledisplay = ;
}
}
上面的代码实现了在C#程序中输入页面的ID号页面中的对应ID的元素显示功能
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
JavaScript调用C#程序
反向调用有点小步骤
aC#代码段让JavaScript能够看见接口
[ComVisible(true)] //com接口可见
public partial class FormPD : Form
{
}
bC#代码段让寄宿的脚本能够访问
private void FormPD_Load(object sender EventArgs e)
{
webBrowserObjectForScripting = this;
}
当然你也可以把 webBrowserObjectForScripting = this; 写在窗口初始化代码里
cJavaScript和网页的相关代码
代码
<script type=text/javascript>
function getSel() {
var t=;
t= windowgetSelection ? windowgetSelection() : (documentgetSelection ? documentgetSelection() : (documentselection ? documentselectioncreateRange()Text : ))
windowexternalShowPrint(实时数据t);
}
</script>
<body onmouseup=getSel()>
关键代码 windowexternalShowPrint(实时数据t);
dC#代码段
代码
public void ShowPrint(string fromnamestring selecthtmltext)
{
//实时数据t
FormSavePrint f = new FormSavePrint(实时数据selecthtmltext);
fMdiParent = formmain;
fShow();
}
OK!上面可以实现当鼠标选中网页的某些区域时此区域的页面代码被传入到C#程序的新窗口中
总体说来比以前的mshtml使用要方便多了