Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <ul class="download">
- <li><a href="WebBrowser_and_WF.zip">Download WebBrowser_and_WF.zip - 75.9 KB</a></li>
- <li><a href="Awesomium_in_WF.zip">Download Awesomium_in_WF.zip - 16.7 MB</a></li>
- </ul>
- <p>Gecko & WebKit samples are under construction now, but already working and may be used as a good start:</p>
- <ul class="download">
- <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>
- </ul>
- <p>WebKit: <a href="http://dropmefiles.com/30SVq">http://dropmefiles.com/30SVq</a> (can't upload to codeproject with "Unexpected error during upload")</p>
- <h2>Who is who?</h2>
- <h3><strong>WebBrowser</strong></h3>
- <p>Default .NET browser engine.</p>
- <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>
- <p>Has <strong>different Winforms and WPF</strong> ports.</p>
- <h3><strong>Gecko</strong></h3>
- <p>Third-party browser engine.</p>
- <p>Based on XULRunner used in <strong>Firefox</strong> browser.</p>
- <p>Has <strong>Winforms</strong> version only.</p>
- <p><strong><font color="red">Warning! This article fully actually only for very, very old Gecko version (1.9). I'll change it to newer and more powerful version (10.*..29.* probably), a bit later.</font></strong></p>
- <h3><strong>Awesomium WebControl</strong></h3>
- <p>Third-party browser <em>control with external customizable core</em>.</p>
- <p>Based on .NET Awesomium core wrapper based on Awesomium core based on modified <strong>Chromium</strong> (or WebKit) engine.</p>
- <p>Has <strong>different Winforms, WPF, Mono </strong>ports.</p>
- <h3><strong>OpenWebKitSharp</strong></h3>
- <p>Third-party browser engine.</p>
- <p>Based on WebKit engine used in <strong>Safari </strong>and <strong>Chromium</strong> browsers.</p>
- <p>Has <strong>Winforms</strong> version only.</p>
- <h2>Who is better?</h2>
- <p>Nobody! Programming language, framework, engine usually may be better <em>only</em> for a particular purpose.</p>
- <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>
- <table border="5" cellpadding="1" cellspacing="6">
- <tbody>
- <tr>
- <td> </td>
- <td><strong>WebBrowser</strong></td>
- <td><strong>Gecko</strong></td>
- <td><strong>Awesomium</strong></td>
- <td><strong>OpenWebKitSharp</strong></td>
- </tr>
- <tr>
- <td><strong>License</strong></td>
- <td>Free. Proprietary</td>
- <td>Free. Open-source: MPL 1.1/GPL 2.0/LGPL 2.1</td>
- <td>Free if your revenue up to $100K (or costs $2900). Proprietary</td>
- <td>Free. Open-source</td>
- </tr>
- <tr>
- <td>
- <p><strong>OS/Platforms</strong></p>
- </td>
- <td>Winforms, WPF</td>
- <td>Winforms</td>
- <td>
- <p>Winforms, WPF</p>
- <p>Cross-platform: Unity, Mono, SDL</p>
- </td>
- <td>
- <p>Winforms.</p>
- <p>Cross-platform: ?</p>
- </td>
- </tr>
- <tr>
- <td>
- <p><strong>Page loading speed</strong></p>
- </td>
- <td>Low</td>
- <td>Medium (?). Control can freezing the form for few seconds on its create</td>
- <td>High</td>
- <td>High</td>
- </tr>
- <tr>
- <td>
- <p><strong>Required dlls size</strong></p>
- </td>
- <td>
- <p>0 MB (included in Win)</p>
- </td>
- <td>22.4 MB</td>
- <td>40.5 MB</td>
- <td>64.6 MB</td>
- </tr>
- <tr>
- <td><strong>Not freezing GUI when page loads</strong></td>
- <td>No</td>
- <td>No</td>
- <td>Yes</td>
- <td>No</td>
- </tr>
- <tr>
- <td><strong>Minimal .NET Version</strong></td>
- <td>.NET 2.0 or more older</td>
- <td>.NET 2.0 or more older</td>
- <td>.NET 4.0</td>
- <td>?</td>
- </tr>
- <tr>
- <td><strong>Object, method, property model</strong></td>
- <td>-</td>
- <td>WebBrowser-identical</td>
- <td>Not WebBrowser-identical</td>
- <td>WebBrowser-identical, but very unfinished, many methods and properties not working!</td>
- </tr>
- <tr>
- <td><strong>DOM manupulate - set HTML</strong></td>
- <td>Yes</td>
- <td>Yes</td>
- <td>Yes</td>
- <td>Via Js only</td>
- </tr>
- <tr>
- <td><strong>DOM manupulate - get HTML</strong></td>
- <td>Yes</td>
- <td>Yes</td>
- <td>Yes, but don't work with disabled 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>
- <td>Via Js only</td>
- </tr>
- <tr>
- <td>
- <p><strong>DOM - GetElementById</strong></p>
- </td>
- <td>Yes</td>
- <td>Yes</td>
- <td>Via Js only</td>
- <td>?</td>
- </tr>
- <tr>
- <td>
- <p><strong>DOM - GetElementsByClassName</strong></p>
- </td>
- <td>Via Js only</td>
- <td>Yes</td>
- <td>Via Js only</td>
- <td>?</td>
- </tr>
- <tr>
- <td>
- <p><strong>DOM - GetElementsByTagName</strong></p>
- </td>
- <td>Yes</td>
- <td>Yes</td>
- <td>Via Js only</td>
- <td>?</td>
- </tr>
- <tr>
- <td><strong>Inject + exec / exec Js</strong></td>
- <td>Inject + exec</td>
- <td>Yes, in newer versions</td>
- <td>Exec</td>
- <td>Exec</td>
- </tr>
- <tr>
- <td><strong>Disable Js</strong></td>
- <td>No, only on all-IE level</td>
- <td>Yes</td>
- <td>Yes</td>
- <td>?</td>
- </tr>
- <tr>
- <td><strong>Set proxy</strong></td>
- <td>No, only on all-IE level</td>
- <td>Yes</td>
- <td>Yes</td>
- <td>?</td>
- </tr>
- <tr>
- <td>
- <p><strong>Dev - Built-in Visual HTML Builder</strong></p>
- </td>
- <td>Yes</td>
- <td>?</td>
- <td>No</td>
- <td>No</td>
- </tr>
- <tr>
- <td><strong>Dev - HTML code syntax-hl viewer</strong></td>
- <td>No</td>
- <td>?</td>
- <td>Yes</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td><strong>Dev - HTML code Visual Inspector & Editor</strong></td>
- <td>No</td>
- <td>?</td>
- <td>No</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td><strong>Built-in download manager</strong></td>
- <td>?</td>
- <td>?</td>
- <td>?</td>
- <td>Yes</td>
- </tr>
- </tbody>
- </table>
- <h2>WebBrowser usage and tricks</h2>
- <h4>Built-in Visual HTML Editor</h4>
- <p>How to enable it:</p>
- <pre lang="cs">
- webBrowser1.Document.DomDocument.GetType().GetProperty("designMode").SetValue(webBrowser1.Document.DomDocument, "On", null);</pre>
- <p>How to paste HTML element programmatically:</p>
- <pre lang="cs">
- // appends:
- // <a id="mylink" href="http://codeproject.com/">
- // <img id="myimg" src="http://dj9okeyxktdvd.cloudfront.net/App_Themes/CodeProject/Img/logo250x135.gif" />
- // </a>
- var mylink = webBrowser1.Document.CreateElement("a");
- mylink.Id = "mylink";
- mylink.SetAttribute("href", "http://codeproject.com/");
- var myimg = webBrowser1.Document.CreateElement("img");
- myimg.Id = "myimg";
- myimg.SetAttribute("src", "http://dj9okeyxktdvd.cloudfront.net/App_Themes/CodeProject/Img/logo250x135.gif");
- mylink.AppendChild(myimg);
- webBrowser1.Document.Body.AppendChild(mylink);</pre>
- <h4>DOM element selection - GetElementById</h4>
- <pre lang="cs">
- var id = "mylink";
- var el = webBrowser1.Document.GetElementById(id);
- if (el != null)
- {
- MessageBox.Show("Element with id=\"" + id + "\" has innerHTML: " + el.InnerHtml);
- }
- else
- {
- MessageBox.Show("Element with id=\"" + id + "\" not found.");
- }</pre>
- <h4>DOM element selection - GetElementsByTagName</h4>
- <pre lang="cs">
- var tag = "img";
- var elz = webBrowser1.Document.GetElementsByTagName(tag);
- if (elz.Count > 0)
- {
- MessageBox.Show(elz.Count + " elements with tag <" + tag + "> found.");
- }
- else
- {
- MessageBox.Show("No elements with tag <" + tag + "> found.");
- }</pre>
- <h4>DOM content manipulate - set HTML</h4>
- <pre lang="cs">
- webBrowser1.DocumentText = "<html><head><script>alert('check!');</script></head><body>lorem</body></html>";</pre>
- <h4>Inject + exec Js</h4>
- <pre lang="cs">
- var head = webBrowser1.Document.GetElementsByTagName("head")[0];
- var scriptEl = webBrowser1.Document.CreateElement("script");
- scriptEl.SetAttribute("text", "function sayHello() { alert('hello') }");
- head.AppendChild(scriptEl);
- webBrowser1.Document.InvokeScript("sayHello");</pre>
- <h2>Gecko usage and tricks</h2>
- <h4>DOM content manipulate - set HTML</h4>
- <pre lang="cs">
- geckoWebBrowser1.Document.DocumentElement.InnerHtml = "<html><head></head><body><a class=\"link\">f</a></body></html>";</pre>
- <h4>DOM element selection - GetElementsByClassName</h4>
- <pre lang="cs">
- (geckoWebBrowser1.Document.GetElementsByClassName("link")[0] as Skybound.Gecko.GeckoElement).InnerHtml = "tt";</pre>
- <h2><span style="color: rgb(51, 51, 51); font-size: 30px;">Awesomium WebControl</span> usage and tricks</h2>
- <h4>DOM content manipulate - set HTML</h4>
- <pre lang="cs">
- webControl1.HTML <span style="font-size: 9pt;">= "<html><head><script>alert('check!');</script></head><body>lorem</body></html>"</span><span style="font-size: 9pt;">;</span></pre>
- <h4>DOM content manipulate - get HTML</h4>
- <pre lang="cs">
- var allhtml = webControl1.ExecuteJavascriptWithResult("document.documentElement.outerHTML");</pre>
- <h4>Exec Js</h4>
- <pre lang="cs">
- webControl1.ExecuteJavascript("document.body.innerHTML += '<i>Hello, World!</i>';");</pre>
- <h4>Disable Js</h4>
- <pre lang="cs">
- var ws = WebCore.CreateWebSession(new WebPreferences() { Javascript = true });
- webControl1 = new Awesomium.Windows.Forms.WebControl() { WebSession = ws };
- this.Controls.Add(webControl1);</pre>
- <h4>Set proxy</h4>
- <pre lang="cs">
- var ws = WebCore.CreateWebSession(new WebPreferences() { ProxyConfig = "255.255.255:8080" });
- webControl1 = new Awesomium.Windows.Forms.WebControl() { WebSession = ws };
- this.Controls.Add(webControl1);</pre>
- <h2>OpenWebKitSharp usage and tricks</h2>
- <h4>DOM content manipulate - set HTML</h4>
- <pre lang="cs">
- webKitBrowser1.GetScriptManager.EvaluateScript("document.body.innerHTML='';");</pre>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement