Advertisement
Guest User

Untitled

a guest
Dec 9th, 2014
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 10.72 KB | None | 0 0
  1. <ul class="download">
  2.     <li><a href="WebBrowser_and_WF.zip">Download WebBrowser_and_WF.zip - 75.9 KB</a></li>
  3.     <li><a href="Awesomium_in_WF.zip">Download Awesomium_in_WF.zip - 16.7 MB</a></li>
  4. </ul>
  5.  
  6. <p>Gecko &amp; WebKit samples are under construction now, but already working and may be used as a good start:</p>
  7.  
  8. <ul class="download">
  9.     <li><a href="GeckoFX_1.9_in_WF.zip">Download GeckoFX_1.9_in_WF.zip - 9.9 MB (very, very arhaic source version without Js, etc., but very, very small</a></li>
  10. </ul>
  11.  
  12. <p>WebKit: <a href="http://dropmefiles.com/30SVq">http://dropmefiles.com/30SVq</a>&nbsp;(can&#39;t upload to codeproject with &quot;Unexpected error during upload&quot;)</p>
  13.  
  14. <h2>Who is who?</h2>
  15.  
  16. <h3><strong>WebBrowser</strong></h3>
  17.  
  18. <p>Default .NET browser engine.</p>
  19.  
  20. <p>Based on <code>MSHTML</code> + <code>Active-X</code> control based on COM <code>IWebBrowser2</code>. <code>MSHTML</code>+<code>IWebBrowser2</code> are main components of <strong>Internet Explorer</strong> browser.</p>
  21.  
  22. <p>Has <strong>different Winforms and WPF</strong>&nbsp;ports.</p>
  23.  
  24. <h3><strong>Gecko</strong></h3>
  25.  
  26. <p>Third-party browser engine.</p>
  27.  
  28. <p>Based on XULRunner used in <strong>Firefox</strong> browser.</p>
  29.  
  30. <p>Has <strong>Winforms</strong> version only.</p>
  31.  
  32. <p><strong><font color="red">Warning! This article fully actually only for very, very old Gecko version (1.9). I&#39;ll change it to newer and more powerful version (10.*..29.* probably), a bit later.</font></strong></p>
  33.  
  34. <h3><strong>Awesomium WebControl</strong></h3>
  35.  
  36. <p>Third-party browser <em>control with external customizable core</em>.</p>
  37.  
  38. <p>Based on .NET Awesomium core wrapper based on Awesomium core based on modified <strong>Chromium</strong>&nbsp;(or WebKit) engine.</p>
  39.  
  40. <p>Has <strong>different Winforms, WPF, Mono&nbsp;</strong>ports.</p>
  41.  
  42. <h3><strong>OpenWebKitSharp</strong></h3>
  43.  
  44. <p>Third-party browser engine.</p>
  45.  
  46. <p>Based on WebKit engine used in <strong>Safari&nbsp;</strong>and&nbsp;<strong>Chromium</strong>&nbsp;browsers.</p>
  47.  
  48. <p>Has&nbsp;<strong>Winforms</strong>&nbsp;version only.</p>
  49.  
  50. <h2>Who is better?</h2>
  51.  
  52. <p>Nobody! Programming language, framework, engine usually&nbsp;may be better <em>only</em> for&nbsp;a particular purpose.</p>
  53.  
  54. <p>You can define your objectives, weigh the pros and cons of engines listed in the table below, and select the engine, the best for you.</p>
  55.  
  56. <table border="5" cellpadding="1" cellspacing="6">
  57.     <tbody>
  58.         <tr>
  59.             <td>&nbsp;</td>
  60.             <td><strong>WebBrowser</strong></td>
  61.             <td><strong>Gecko</strong></td>
  62.             <td><strong>Awesomium</strong></td>
  63.             <td><strong>OpenWebKitSharp</strong></td>
  64.         </tr>
  65.         <tr>
  66.             <td><strong>License</strong></td>
  67.             <td>Free. Proprietary</td>
  68.             <td>Free. Open-source:&nbsp;MPL 1.1/GPL 2.0/LGPL 2.1</td>
  69.             <td>Free if your revenue up to $100K (or costs $2900). Proprietary</td>
  70.             <td>Free. Open-source</td>
  71.         </tr>
  72.         <tr>
  73.             <td>
  74.             <p><strong>OS/Platforms</strong></p>
  75.             </td>
  76.             <td>Winforms, WPF</td>
  77.             <td>Winforms</td>
  78.             <td>
  79.             <p>Winforms, WPF</p>
  80.  
  81.             <p>Cross-platform: Unity, Mono, SDL</p>
  82.             </td>
  83.             <td>
  84.             <p>Winforms.</p>
  85.  
  86.             <p>Cross-platform: ?</p>
  87.             </td>
  88.         </tr>
  89.         <tr>
  90.             <td>
  91.             <p><strong>Page loading speed</strong></p>
  92.             </td>
  93.             <td>Low</td>
  94.             <td>Medium (?). Control can freezing the form for few seconds on its create</td>
  95.             <td>High</td>
  96.             <td>High</td>
  97.         </tr>
  98.         <tr>
  99.             <td>
  100.             <p><strong>Required dlls size</strong></p>
  101.             </td>
  102.             <td>
  103.             <p>0 MB (included in Win)</p>
  104.             </td>
  105.             <td>22.4 MB</td>
  106.             <td>40.5 MB</td>
  107.             <td>64.6 MB</td>
  108.         </tr>
  109.         <tr>
  110.             <td><strong>Not freezing GUI when page loads</strong></td>
  111.             <td>No</td>
  112.             <td>No</td>
  113.             <td>Yes</td>
  114.             <td>No</td>
  115.         </tr>
  116.         <tr>
  117.             <td><strong>Minimal .NET Version</strong></td>
  118.             <td>.NET 2.0 or more older</td>
  119.             <td>.NET 2.0 or more older</td>
  120.             <td>.NET 4.0</td>
  121.             <td>?</td>
  122.         </tr>
  123.         <tr>
  124.             <td><strong>Object, method, property model</strong></td>
  125.             <td>-</td>
  126.             <td>WebBrowser-identical</td>
  127.             <td>Not WebBrowser-identical</td>
  128.             <td>WebBrowser-identical, but very&nbsp;unfinished, many methods and properties not working!</td>
  129.         </tr>
  130.         <tr>
  131.             <td><strong>DOM manupulate - set HTML</strong></td>
  132.             <td>Yes</td>
  133.             <td>Yes</td>
  134.             <td>Yes</td>
  135.             <td>Via Js only</td>
  136.         </tr>
  137.         <tr>
  138.             <td><strong>DOM manupulate -&nbsp;get HTML</strong></td>
  139.             <td>Yes</td>
  140.             <td>Yes</td>
  141.             <td>Yes, but don&#39;t work with disabled&nbsp;JS! Also, there is a bug, use JS analogue - <span style="color: rgb(153, 0, 0); font-family: Consolas, 'Courier New', Courier, mono; font-size: 15px;">document.documentElement.outerHTML</span></td>
  142.             <td>Via Js&nbsp;only</td>
  143.         </tr>
  144.         <tr>
  145.             <td>
  146.             <p><strong>DOM -&nbsp;GetElementById</strong></p>
  147.             </td>
  148.             <td>Yes</td>
  149.             <td>Yes</td>
  150.             <td>Via Js&nbsp;only</td>
  151.             <td>?</td>
  152.         </tr>
  153.         <tr>
  154.             <td>
  155.             <p><strong>DOM -&nbsp;GetElementsByClassName</strong></p>
  156.             </td>
  157.             <td>Via Js&nbsp;only</td>
  158.             <td>Yes</td>
  159.             <td>Via Js&nbsp;only</td>
  160.             <td>?</td>
  161.         </tr>
  162.         <tr>
  163.             <td>
  164.             <p><strong>DOM -&nbsp;GetElementsByTagName</strong></p>
  165.             </td>
  166.             <td>Yes</td>
  167.             <td>Yes</td>
  168.             <td>Via Js&nbsp;only</td>
  169.             <td>?</td>
  170.         </tr>
  171.         <tr>
  172.             <td><strong>Inject + exec / exec Js</strong></td>
  173.             <td>Inject + exec</td>
  174.             <td>Yes, in newer versions</td>
  175.             <td>Exec</td>
  176.             <td>Exec</td>
  177.         </tr>
  178.         <tr>
  179.             <td><strong>Disable Js</strong></td>
  180.             <td>No, only on all-IE level</td>
  181.             <td>Yes</td>
  182.             <td>Yes</td>
  183.             <td>?</td>
  184.         </tr>
  185.         <tr>
  186.             <td><strong>Set proxy</strong></td>
  187.             <td>No, only on all-IE level</td>
  188.             <td>Yes</td>
  189.             <td>Yes</td>
  190.             <td>?</td>
  191.         </tr>
  192.         <tr>
  193.             <td>
  194.             <p><strong>Dev - Built-in Visual HTML Builder</strong></p>
  195.             </td>
  196.             <td>Yes</td>
  197.             <td>?</td>
  198.             <td>No</td>
  199.             <td>No</td>
  200.         </tr>
  201.         <tr>
  202.             <td><strong>Dev - HTML code syntax-hl viewer</strong></td>
  203.             <td>No</td>
  204.             <td>?</td>
  205.             <td>Yes</td>
  206.             <td>Yes</td>
  207.         </tr>
  208.         <tr>
  209.             <td><strong>Dev - HTML code&nbsp;Visual Inspector &amp; Editor</strong></td>
  210.             <td>No</td>
  211.             <td>?</td>
  212.             <td>No</td>
  213.             <td>Yes</td>
  214.         </tr>
  215.         <tr>
  216.             <td><strong>Built-in download manager</strong></td>
  217.             <td>?</td>
  218.             <td>?</td>
  219.             <td>?</td>
  220.             <td>Yes</td>
  221.         </tr>
  222.     </tbody>
  223. </table>
  224.  
  225. <h2>WebBrowser usage and tricks</h2>
  226.  
  227. <h4>Built-in Visual HTML Editor</h4>
  228.  
  229. <p>How to enable it:</p>
  230.  
  231. <pre lang="cs">
  232. webBrowser1.Document.DomDocument.GetType().GetProperty(&quot;designMode&quot;).SetValue(webBrowser1.Document.DomDocument, &quot;On&quot;, null);</pre>
  233.  
  234. <p>How to paste HTML element programmatically:</p>
  235.  
  236. <pre lang="cs">
  237. // appends:
  238. // &lt;a id=&quot;mylink&quot; href=&quot;http://codeproject.com/&quot;&gt;
  239. //   &lt;img id=&quot;myimg&quot; src=&quot;http://dj9okeyxktdvd.cloudfront.net/App_Themes/CodeProject/Img/logo250x135.gif&quot; /&gt;
  240. // &lt;/a&gt;
  241.  
  242. var mylink = webBrowser1.Document.CreateElement(&quot;a&quot;);
  243. mylink.Id = &quot;mylink&quot;;
  244. mylink.SetAttribute(&quot;href&quot;, &quot;http://codeproject.com/&quot;);
  245.              
  246. var myimg = webBrowser1.Document.CreateElement(&quot;img&quot;);
  247. myimg.Id = &quot;myimg&quot;;
  248. myimg.SetAttribute(&quot;src&quot;, &quot;http://dj9okeyxktdvd.cloudfront.net/App_Themes/CodeProject/Img/logo250x135.gif&quot;);
  249. mylink.AppendChild(myimg);
  250. webBrowser1.Document.Body.AppendChild(mylink);</pre>
  251.  
  252. <h4>DOM element selection -&nbsp;GetElementById</h4>
  253.  
  254. <pre lang="cs">
  255. var id = &quot;mylink&quot;;
  256.  
  257. var el = webBrowser1.Document.GetElementById(id);
  258. if (el != null)
  259. {
  260.     MessageBox.Show(&quot;Element with id=\&quot;&quot; + id + &quot;\&quot; has innerHTML: &quot; + el.InnerHtml);
  261. }
  262. else
  263. {
  264.     MessageBox.Show(&quot;Element with id=\&quot;&quot; + id + &quot;\&quot; not found.&quot;);
  265. }</pre>
  266.  
  267. <h4>DOM element selection -&nbsp;GetElementsByTagName</h4>
  268.  
  269. <pre lang="cs">
  270. var tag = &quot;img&quot;;
  271.  
  272. var elz = webBrowser1.Document.GetElementsByTagName(tag);
  273. if (elz.Count &gt; 0)
  274. {
  275.     MessageBox.Show(elz.Count + &quot; elements with tag &lt;&quot; + tag + &quot;&gt; found.&quot;);
  276. }
  277. else
  278. {
  279.     MessageBox.Show(&quot;No elements with tag &lt;&quot; + tag + &quot;&gt; found.&quot;);
  280. }</pre>
  281.  
  282. <h4>DOM content manipulate - set HTML</h4>
  283.  
  284. <pre lang="cs">
  285. webBrowser1.DocumentText = &quot;&lt;html&gt;&lt;head&gt;&lt;script&gt;alert(&#39;check!&#39;);&lt;/script&gt;&lt;/head&gt;&lt;body&gt;lorem&lt;/body&gt;&lt;/html&gt;&quot;;</pre>
  286.  
  287. <h4>Inject + exec Js</h4>
  288.  
  289. <pre lang="cs">
  290. var head = webBrowser1.Document.GetElementsByTagName(&quot;head&quot;)[0];
  291.  
  292. var scriptEl = webBrowser1.Document.CreateElement(&quot;script&quot;);
  293. scriptEl.SetAttribute(&quot;text&quot;, &quot;function sayHello() { alert(&#39;hello&#39;) }&quot;);
  294. head.AppendChild(scriptEl);
  295.  
  296. webBrowser1.Document.InvokeScript(&quot;sayHello&quot;);</pre>
  297.  
  298. <h2>Gecko usage and tricks</h2>
  299.  
  300. <h4>DOM content manipulate -&nbsp;set HTML</h4>
  301.  
  302. <pre lang="cs">
  303. geckoWebBrowser1.Document.DocumentElement.InnerHtml = &quot;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;a class=\&quot;link\&quot;&gt;f&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;&quot;;</pre>
  304.  
  305. <h4>DOM element selection -&nbsp;GetElementsByClassName</h4>
  306.  
  307. <pre lang="cs">
  308. (geckoWebBrowser1.Document.GetElementsByClassName(&quot;link&quot;)[0] as Skybound.Gecko.GeckoElement).InnerHtml = &quot;tt&quot;;</pre>
  309.  
  310. <h2><span style="color: rgb(51, 51, 51); font-size: 30px;">Awesomium WebControl</span>&nbsp;usage and tricks</h2>
  311.  
  312. <h4>DOM content manipulate -&nbsp;set HTML</h4>
  313.  
  314. <pre lang="cs">
  315. webControl1.HTML <span style="font-size: 9pt;">= &quot;&lt;html&gt;&lt;head&gt;&lt;script&gt;alert(&#39;check!&#39;);&lt;/script&gt;&lt;/head&gt;&lt;body&gt;lorem&lt;/body&gt;&lt;/html&gt;&quot;</span><span style="font-size: 9pt;">;</span></pre>
  316.  
  317. <h4>DOM content manipulate -&nbsp;get HTML</h4>
  318.  
  319. <pre lang="cs">
  320. var allhtml = webControl1.ExecuteJavascriptWithResult(&quot;document.documentElement.outerHTML&quot;);</pre>
  321.  
  322. <h4>Exec Js</h4>
  323.  
  324. <pre lang="cs">
  325. webControl1.ExecuteJavascript(&quot;document.body.innerHTML += &#39;&lt;i&gt;Hello, World!&lt;/i&gt;&#39;;&quot;);</pre>
  326.  
  327. <h4>Disable&nbsp;Js</h4>
  328.  
  329. <pre lang="cs">
  330. var ws = WebCore.CreateWebSession(new WebPreferences() { Javascript = true });
  331. webControl1 = new Awesomium.Windows.Forms.WebControl() { WebSession = ws };
  332. this.Controls.Add(webControl1);</pre>
  333.  
  334. <h4>Set proxy</h4>
  335.  
  336. <pre lang="cs">
  337. var ws = WebCore.CreateWebSession(new WebPreferences() { ProxyConfig = &quot;255.255.255:8080&quot; });
  338. webControl1 = new Awesomium.Windows.Forms.WebControl() { WebSession = ws };
  339. this.Controls.Add(webControl1);</pre>
  340.  
  341. <h2>OpenWebKitSharp&nbsp;usage and tricks</h2>
  342.  
  343. <h4>DOM content manipulate -&nbsp;set HTML</h4>
  344.  
  345. <pre lang="cs">
  346. webKitBrowser1.GetScriptManager.EvaluateScript(&quot;document.body.innerHTML=&#39;&#39;;&quot;);</pre>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement