2023年6月21日发(作者:)

【转】C#开发Chrome内核浏览器()是对WebKit的.Net封装,使⽤它.net程序可以⾮常⽅便的集成和使⽤webkit作为加载⽹页的容器。这⾥介绍⼀下怎么⽤它来显⽰⼀个⽹页这样的⼀个最简单的功能。第⼀步:下载 的bin⽂件。别⼩看这⼀步,你不⼀定能下载成功,原因你懂的。第⼆步:新建⼀个WindowsForms⼯程。然后把下载好的 bin⽬录下的所有⽂件复制到新建⼯程的bin/Debug/⽬录下。添加引⽤,通过浏览添加对“”的引⽤。第三步:来写写代码了。双击Form1的窗体进⼊代码,写下这⼏⾏代码: private void Form1_Load(object sender, EventArgs e) { Browser browser = new WebKitBrowser(); = ; (browser); te(""); }运⾏看看效果:与IE内核的WebBrowser对⽐:⾮常简单的三步就完成了。可是话说回来了,时下都流⾏⼀步到位的,例如使⽤wser 。使⽤.Net框架⾃带的,调⽤IE内核的WebBrowser来显⽰⽹页也许更简单些,只需要在新建的⼯程中写下这么⼏⾏代码便可: private void Form1_Load(object sender, EventArgs e) { WebBrowser browser = new WebBrowser(); = ; (browser); te("");

}运⾏起来的效果看起来差不多,⾁眼基本只能看出字体稍微不同⽽已:既然都差不多,那为什么还不厌其烦的去下载⼏个M的dll来显⽰⽹页呢?这是因为如果使⽤IE内核的WebBrowser我们⽆法预知对⽹页的显⽰效果,例如你的电脑是xp,可能会调⽤ie6作为加载器,如果是win7,可能会调⽤ie8作为加载器,⽽他们的显⽰效果是不完全⼀样的。下⾯⽤⼀个例⼦来看看。 private void Form1_Load(object sender, EventArgs e) { WebBrowser browser = new WebBrowser(); = ; te("/doraemon/doraemon_"); (browser); Browser kitBrowser = new WebKitBrowser(); = ; te("/doraemon/doraemon_"); (kitBrowser); }效果图如下:本机的系统是win7+IE9,但是通过WebBrowser调⽤,估计仍然使⽤的是IE8内核,所以显⽰效果很差。通过这样左右对⽐,可以看出多了⼀步⿇烦,是有必要的。/***********************************************************************/问:下载了⼀个第三⽅的内核浏览器插件(版本是2011),调⽤⽹页中的js函数报错:对 COM 组件的调⽤返回了错误 HRESULT E_FAIL,不知道是因为缺少⽂件还是其他原因?webkit插件怎么调⽤⽹页上的js函数呢?拜托各位

答:花费了⼀些时间算是解决了总结⼀下结论,⽅便他⼈。调⽤js函数://ntText =// "Test Page" +// "

Hello, World!

" +// "

A

B

C

" +// "" +// "";ptingEnabled = true;//启⽤js函数调⽤string str = ByEvaluatingJavaScriptFromString("Test()");//参数跟webbrowser有点不⼀样,⽅法名加括号,测试时不要直接alert,好像没显⽰出来两句代码,js函数定义到需要调⽤的⽹页⾥⾯,或者直接嵌⼊⼀段js也可以,⽐如上⾯注释的部分。/**********************************************************************************/有个项⽬要使⽤WebBroswer控件,并且要能传递⼀个js对象供前台调⽤,⽤c#的WebBroswer控件很容易实现:[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. WebBrowser wb = new WebBrowser();

4. ForScripting = new myClass();

5. }

[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. WebBrowser wb = new WebBrowser();

4. ForScripting = new myClass();

5. }

要传递的js对象必须使⽤[ComVisibleAttribute]标记为COM 可见:[csharp]

1. [ibleAttribute(true)]

2. class myClass

3. {

4. public void Test()

5. {

6. ("alert:Test");

7. }

8. }

[csharp]

1. [ibleAttribute(true)]

2. class myClass

3. {

4. public void Test()

5. {

6. ("alert:Test");

7. }

8. }

这样前台就能使⽤al调⽤myClass的⽅法: ();如果就这样那就简单了 ,可偏偏项⽬使⽤的⽹站对IE的兼容性极差(吐槽下:个⼈觉得是IE太烂了,对标准的⽀持太差),⽆奈之下想找寻其他类似的WebBrowser控件,发现⼏个不错的替换控件:1. GeokoFx:⼀个Firefox的Geoko引擎的Windows Forms包装,google上的下载地址: 官⽹:2. :webkit的.NET封装,下载地址:本来决定使⽤GeokoFx,因为项⽬使⽤的⽹站⽤⽕狐打开是很快的,但是我找了⼏天资料也没发现怎么传递个js对象给控件,当发现Qt的webbroswer控件也是封装的WebKit控件时,遂决定使⽤WebKit,但也没有直接提供传递对象的⽅法,后来发现⼜⼀个好东西:1. open-webkit-sharp:对的⼜⼀次封装,提供了很多新功能。google上下载地址:下⾯的使⽤就⾮常简单了,下载open-webkit-sharp后,把Core⽂件夹和References⽂件夹下所有⽂件拷贝到你的⼯程⽬录下,然后打开你的项⽬,添加引⽤和(如果你的项⽬运⾏在.NET Framework 2.0 或 3.5 引⽤ Binary_NET2⽂件夹下的这两个⽂件,NET4.0的话就引⽤Binary⽂件夹下的这两个dll);然后就是⼯具箱->选择项->选择,然后从⼯具箱中把WebKitBrowser拖到你的窗体上.现在已经成功了⼀⼤步了,但是为了避免使⽤时遇到各种错误,我们需要先安装两个⽀持⽂件:1. Microsoft C++ 2005 Redistributable XP/Vista/7 32/64 Bit2. Apple QuickTime (Optional - for better HTML5 Support) Ready!开始传递对象:[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. te("yourWebSiteUrl");

4. ntCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);

5. }

6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

7. {

8. Object = new myClass();

9. }

[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. te("yourWebSiteUrl");

4. ntCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);

5. }

6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

7. {

8. Object = new myClass();

9. }

前台调⽤⽅式类似IE的webbroswer,也使⽤al调⽤,你也可以⾃⼰定义⼀个对象:[csharp]

1. teScript("var obj=al;");

[csharp]

1. teScript("var obj=al;");

这样调⽤的时候就能⽤你⾃⼰定义的对象名访问了。应该也有直接⾃⼰定义对象的⽅法,但是open-webkit-sharp中⽂的资料实在的不多,耐着性⼦看了⼏天⽼外的论坛,⼀⽔的全是吐槽,实际解决问题的不多。等有更好的⽅法,也请⼤家不吝赐教。

李民权

2023年6月21日发(作者:)

【转】C#开发Chrome内核浏览器()是对WebKit的.Net封装,使⽤它.net程序可以⾮常⽅便的集成和使⽤webkit作为加载⽹页的容器。这⾥介绍⼀下怎么⽤它来显⽰⼀个⽹页这样的⼀个最简单的功能。第⼀步:下载 的bin⽂件。别⼩看这⼀步,你不⼀定能下载成功,原因你懂的。第⼆步:新建⼀个WindowsForms⼯程。然后把下载好的 bin⽬录下的所有⽂件复制到新建⼯程的bin/Debug/⽬录下。添加引⽤,通过浏览添加对“”的引⽤。第三步:来写写代码了。双击Form1的窗体进⼊代码,写下这⼏⾏代码: private void Form1_Load(object sender, EventArgs e) { Browser browser = new WebKitBrowser(); = ; (browser); te(""); }运⾏看看效果:与IE内核的WebBrowser对⽐:⾮常简单的三步就完成了。可是话说回来了,时下都流⾏⼀步到位的,例如使⽤wser 。使⽤.Net框架⾃带的,调⽤IE内核的WebBrowser来显⽰⽹页也许更简单些,只需要在新建的⼯程中写下这么⼏⾏代码便可: private void Form1_Load(object sender, EventArgs e) { WebBrowser browser = new WebBrowser(); = ; (browser); te("");

}运⾏起来的效果看起来差不多,⾁眼基本只能看出字体稍微不同⽽已:既然都差不多,那为什么还不厌其烦的去下载⼏个M的dll来显⽰⽹页呢?这是因为如果使⽤IE内核的WebBrowser我们⽆法预知对⽹页的显⽰效果,例如你的电脑是xp,可能会调⽤ie6作为加载器,如果是win7,可能会调⽤ie8作为加载器,⽽他们的显⽰效果是不完全⼀样的。下⾯⽤⼀个例⼦来看看。 private void Form1_Load(object sender, EventArgs e) { WebBrowser browser = new WebBrowser(); = ; te("/doraemon/doraemon_"); (browser); Browser kitBrowser = new WebKitBrowser(); = ; te("/doraemon/doraemon_"); (kitBrowser); }效果图如下:本机的系统是win7+IE9,但是通过WebBrowser调⽤,估计仍然使⽤的是IE8内核,所以显⽰效果很差。通过这样左右对⽐,可以看出多了⼀步⿇烦,是有必要的。/***********************************************************************/问:下载了⼀个第三⽅的内核浏览器插件(版本是2011),调⽤⽹页中的js函数报错:对 COM 组件的调⽤返回了错误 HRESULT E_FAIL,不知道是因为缺少⽂件还是其他原因?webkit插件怎么调⽤⽹页上的js函数呢?拜托各位

答:花费了⼀些时间算是解决了总结⼀下结论,⽅便他⼈。调⽤js函数://ntText =// "Test Page" +// "

Hello, World!

" +// "

A

B

C

" +// "" +// "";ptingEnabled = true;//启⽤js函数调⽤string str = ByEvaluatingJavaScriptFromString("Test()");//参数跟webbrowser有点不⼀样,⽅法名加括号,测试时不要直接alert,好像没显⽰出来两句代码,js函数定义到需要调⽤的⽹页⾥⾯,或者直接嵌⼊⼀段js也可以,⽐如上⾯注释的部分。/**********************************************************************************/有个项⽬要使⽤WebBroswer控件,并且要能传递⼀个js对象供前台调⽤,⽤c#的WebBroswer控件很容易实现:[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. WebBrowser wb = new WebBrowser();

4. ForScripting = new myClass();

5. }

[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. WebBrowser wb = new WebBrowser();

4. ForScripting = new myClass();

5. }

要传递的js对象必须使⽤[ComVisibleAttribute]标记为COM 可见:[csharp]

1. [ibleAttribute(true)]

2. class myClass

3. {

4. public void Test()

5. {

6. ("alert:Test");

7. }

8. }

[csharp]

1. [ibleAttribute(true)]

2. class myClass

3. {

4. public void Test()

5. {

6. ("alert:Test");

7. }

8. }

这样前台就能使⽤al调⽤myClass的⽅法: ();如果就这样那就简单了 ,可偏偏项⽬使⽤的⽹站对IE的兼容性极差(吐槽下:个⼈觉得是IE太烂了,对标准的⽀持太差),⽆奈之下想找寻其他类似的WebBrowser控件,发现⼏个不错的替换控件:1. GeokoFx:⼀个Firefox的Geoko引擎的Windows Forms包装,google上的下载地址: 官⽹:2. :webkit的.NET封装,下载地址:本来决定使⽤GeokoFx,因为项⽬使⽤的⽹站⽤⽕狐打开是很快的,但是我找了⼏天资料也没发现怎么传递个js对象给控件,当发现Qt的webbroswer控件也是封装的WebKit控件时,遂决定使⽤WebKit,但也没有直接提供传递对象的⽅法,后来发现⼜⼀个好东西:1. open-webkit-sharp:对的⼜⼀次封装,提供了很多新功能。google上下载地址:下⾯的使⽤就⾮常简单了,下载open-webkit-sharp后,把Core⽂件夹和References⽂件夹下所有⽂件拷贝到你的⼯程⽬录下,然后打开你的项⽬,添加引⽤和(如果你的项⽬运⾏在.NET Framework 2.0 或 3.5 引⽤ Binary_NET2⽂件夹下的这两个⽂件,NET4.0的话就引⽤Binary⽂件夹下的这两个dll);然后就是⼯具箱->选择项->选择,然后从⼯具箱中把WebKitBrowser拖到你的窗体上.现在已经成功了⼀⼤步了,但是为了避免使⽤时遇到各种错误,我们需要先安装两个⽀持⽂件:1. Microsoft C++ 2005 Redistributable XP/Vista/7 32/64 Bit2. Apple QuickTime (Optional - for better HTML5 Support) Ready!开始传递对象:[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. te("yourWebSiteUrl");

4. ntCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);

5. }

6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

7. {

8. Object = new myClass();

9. }

[csharp]

1. private void Form1_Load(object sender, EventArgs e)

2. {

3. te("yourWebSiteUrl");

4. ntCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);

5. }

6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

7. {

8. Object = new myClass();

9. }

前台调⽤⽅式类似IE的webbroswer,也使⽤al调⽤,你也可以⾃⼰定义⼀个对象:[csharp]

1. teScript("var obj=al;");

[csharp]

1. teScript("var obj=al;");

这样调⽤的时候就能⽤你⾃⼰定义的对象名访问了。应该也有直接⾃⼰定义对象的⽅法,但是open-webkit-sharp中⽂的资料实在的不多,耐着性⼦看了⼏天⽼外的论坛,⼀⽔的全是吐槽,实际解决问题的不多。等有更好的⽅法,也请⼤家不吝赐教。

李民权