I would like to implement a web browser in my c#-program. The browser should cover some requirements:
It should be updateable
I'm not sure if this is possible, but it would be great if the implementet web-browser would alwasy be using the latest version of the based browser which is installed on the system.
Easy implementation
Of course, the easier to use, the better!
Security
And the used browser should be as secure as possible. The safest i could think of, was running the browser in sandboxed mode. Are there other possibilities to achieve a maxiumum of security?
Untill now i have found some wrappers for different Browser-Engines, but none of hem seems to match my requirements:
Awesomium: Is very easy to use! But is still based on an old Version of Chrome (12.0.702.0)
Berkelium: Same as Awesomium, i think.
CefSharp:
GeckoFX: Needs FireFox 1.5 installed
MozNet: Based on FireFox 3.6
WebKit.NET: I'm not sure about that...
the native WebBrowser Class: I think this is the best i could get - because it always uses the latest installed version of IE.
After doing some more research, i think i'll stick with the WebBrowser Control. It's not perfect and the posibilities to use own settings are not as good as i hoped, but i think since there seems no better solution, it will have to work...
Related
I am trying to detect which version of IE an end-user has installed on their computer (My App uses WebBrowser control).
I need to know which version they are using which may not be as simple as
WebBrowser.Version
it seems that although that gives the version it does not tell us if the browser is actually using that version or a compatible version.
Also, With the WebBrowser.Version in hand, how would I go about deciding if this is the latest version of IE?
Any ideas, pointers - if not - tell a joke or something!
Cheers
Does people still use the Webbrowser control when things like Gecko and Webkit exists?
Anyways you can use the windows registry.
Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Internet Explorer").GetValue("Version")
I was really excited when I found GeckoFX last month. My employer wants to distribute an embedded browser with our desktop application (to smooth the transition from desktop-based apps to web-based apps), and being able to use Gecko rather than IE was a miracle!
The latest versions of GeckoFX I can find use versions 1.9.1 and 1.9.2 of the Gecko engine (Xulrunner). This works just fine, but it's missing a lot of the goodies that shipped with Firefox 4 (Gecko 2.0) this week.
I already have the distribution of Xulrunner 2.0, but GeckoFX won't work with it out of the box. Some of the XPCOM API has changed, and I'm sure there are a lot of other minor incompatibilities. I'd say it should be an easy fix, but I'm not a C++ developer so I really have no idea.
What I'm looking for right now is one of the following, in order of preference:
An already-built update of GeckoFX that's compatible with Xulrunner 2.0
Another solution that allows me to embed a Gecko-powered web browser in a C# Windows application.
Advice on where to start to update GeckoFX myself (by advice I mean hold-my-hand-and-talk-to-me-like-I'm-6 advice)
Just digging in to the code and trying to sort through all the errors doesn't help. I keep getting an InvalidCastException when trying to create an instance of nsIWebBrowser (and no, I can't get more descriptive than that because that's all the error message and stack trace show!). It's been a lot of head scratching and pointless Googling since it seems no one's kicked off an embedded Firefox 4 yet.
Ideas? Suggestions?
In the absence of deeper help, I took the time to dig in and figure things out on my own. The trick was understanding ComImport, which is something I haven't used before.
It turns out, Mozilla changed the GUIDs of some of the API methods exposed by XPCOM. Most importantly, the GUID for nsIWebBrowser changed from 69E5DF00-7B8B-11d3-AF61-00A024FFC08C to 33e9d001-caab-4ba9-8961-54902f197202.
Making this one change in nsInterfaces.cs actually fixed quite a bit.
Going through line-by-line and reconciling build errors (despite cryptic error messages) allowed me to finish out the system and create a build that does indeed run XULRunner 2.0.
Unfortunately, being able to build and run Gecko 2 and exposing the entire API are two very different things. I've created a project on Google Code to house a complete rewrite of GeckoFX for Gecko 2: Leapin' Lizard. It's essentially a fork of the original Skybound.Gecko code, and distributed under the same open source licenses.
So I now have a build of GeckoFX that's compatible with XULRunner 2.0. It just needs to be polished.
At the moment there is no pre-compiled library that wraps XulRunner 4.0. I am the author of MozNET, a Mozilla wrapper build that is actually being actively developed. I do have a semi-working build, utilizing XulRunner 2.0 but, it is not yet complete. Due to the changes made in XulRunner 2.0 there are still a ton of changes to in order to make MozNET fully compatible with the new build. At the moment I have full browsing support, nearly-complete DOM object access and full spell check support. The build is a work in progress as I am still maintaining and supporting MozNET 1.9.2.17.
recently I've moved on to testing my web aplication in IE8, however, I've noticed that the position of my controls now all over the place. This was not apparent when I was testing my app with IE7 and Firefox 3.5. I know that there is a suggested "fix" for this issue by including
meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"
into the HTML source, but I think it might be better if I changed my app to natively support IE8, instead of falling back to Compatibility Mode.
All my controls are positioned by offsetting from normal flow, but I've also noticed that even if they are positioned in normal flow or absolutely positioned, the problem still exists.
I'm developing my app entirely in C# as I have much to no knowledge of CSS, but I have no qualms about changing that if that's the path to solving this issue.
Thanks.
Edit: I'm using Visual Studio 2005 btw
Edit: After more forum diving, I found a link to a nice blog entry # http://blogs.msdn.com/ie/archive/2009/03/12/site-compatibility-and-ie8.aspx which lists some quick differences between IE8 Standard View, IE8 Compatibility View and IE7 which might break a site. Hope it helps other people facing similar issues.
If you are building a website, you'll have to use CSS.
This is a good resource for starting with CSS - http://www.w3.org/Style/CSS/learning
Css will allow you to create a website that works for most modern browsers. Here's a good table for matching CSS version and browser version: http://www.quirksmode.org/css/contents.html
However, there are some browsers - notably IE6 - that haven't implemented the CSS guidlines properly. This results in the need for IE6 specific CSS hacks for anything remotely sophisticated.
This is a good strating point for browser hacks:
http://articles.sitepoint.com/article/browser-specific-css-hacks#
Honestly the issue really lies in your markup and CSS rules. IE8 is much more compliant to the W3c CSS standards. So you most likely have had issues with FireFox, Opera, Chrome and Safari you did not know about. The non-IE browsers will not honor your IE7 tag.
My advice is to make your page work in the new browsers, keep things relatively simple so you can make it work in IE 6 and 7. IE 6 really needs to just go away, but alas too many folks wont upgrade. IE 7 honestly needs to be phased out as well.
I have been writing a series I am calling Thin ASP.NET that sort of focuses on doing things in CSS layouts for ASP.NET sites, http://professionalaspnet.com/archive/tags/Thin+ASP/default.aspx
CSS can be rather daunting when you are first beginning using it, personally I like to use a CSS editor. I use Skybound Stylizer (www.skybound.ca). They offer a free basic version, which is really all that you need to begin and to even publish a website, but at only $79 I upgraded to their Ultimate edition to show my support and I am still loving it :)
I suggest checking it out. It will allow you to make changes and see instantly what happens, it also supports the ability to view the page as you would in IE or Firefox with additional support to make it easy to make conditional CSS comments for separate browsers.
Hope this helps,
David.
I would like to build a browser extension for IE 7/8. I would like to do it using .NET. Do you know of any resources or tutorials that I could reference to do this? I haven't found much.
Thanks!
JP,
One of the main issues that makes IE extensions hard to develop is the need to develop with C, or .NET.
On the other side, FF and Chrome use (to some extent) JS, which is easier, and has a much lower entrance barrier (How many C "web developers" do you know?).
This is one of the issues / obstacle Crossrider is here to solve.
You can create your first IE plugin within minutes. It will save you a lot of research and development time, and you can write your code with Javascript.
On top of that, if you plan this plugin/extension to also work for browsers other than IE then you can develop a cross browser extension once, using an extensive unified API, and we will make it work for Chrome and Firefox.
Chrome and Firefox each one gets a a native extension file (CRX and XPI respectively) while IE a special EXE engine to run your app.
(Disclaimer: I'm a co-founder of Crossrider)
The same question that was asked two years later has the necessary answer. Everyone should refer to this question now:
How to get started with developing Internet Explorer extensions?
I'd love to know if there is such a thing as a Gecko.NET ;) I mean, just like we can embed a WebView and that is an "instance" of IE7 inside any Windows Forms application (and tell it to navigateto(fancy_url);). I'd love to use Firefox or WebKit.
Anybody tried this?
UPDATE: Please bear in mind that although it is possible to embed Gecko using the mentioned controls, it is still impossible to print while using Gecko.
UPDATE March 2010: It’s still not possible to print natively using GeckoFX, however a couple of methods exist that may be enough, depending upon what you’re trying to do.
See: http://geckofx.org/viewtopic.php?id=796 for more information.
UPDATE October 2013: I am no longer doing Windows development so I have no interest in this, but seems like the development of Gecko can be found here: https://bitbucket.org/geckofx and it seems to be recently updated. Leaving this here for future Windows devs ;)
UPDATE January 2017: I have gotten an email from a company called TeamDev. They created a Chromium-based .NET browser component called "DotNetBrowser" which can be used to display modern web pages in Windows Forms applications.
To quote the email directly:
Here are some details about the component, which might be helpful:
DotNetBrowser is based on Chromium, thus supporting HTML5, CSS3, JS and the latest web standards. The underlying Chromium version of the library is regularly updated.
The component is suitable for WPF as well as Windows Forms desktop applications, and works both for C# and VB.NET.
The library is licensed commercially, however free licences are provided for Open Source and academic projects.
Disclaimer: I have not used this DotNetBrowser for I no longer do Windows Development but may be worth checking if you're looking for a solution to this.
http://code.google.com/p/geckofx/
This is a nice .NET-wrapped version of Gecko
It certainly is possible. All you need to do is register the Mozilla ActiveX control (mozctlx.dll I believe), and you can drag it onto your form as any ActiveX control. The programming interface is similar (though not identical) to the IE one, and you can even use the Microsoft.MSHTML.dll managed library for control in some cases.
I believe this is packaged with Firefox. If not, you can get just the embeddable bits from Mozilla as well. Just do a Google search for Mozilla ActiveX control or Mozilla Embedding C# and that should take you down the right path.
GeckoFX is no longer being updated. The alternative is the MozNet XulRunner wrapper by Se7en Soft. MozNet has a ton of features that GeckoFX doesn't and is being actively updated and maintained.
I'd just like to point out, to all looking to embed Gecko into their applications, that the GeckoFX project appears to have been abandoned by its creators (Skybound Software). MozNET, while previously based on GeckoFX, sorta' picked up the ball and ran with it. It has the full ability to print, do print previews and allows you to set it all up via the native Windows print dialog, even - and a whole lot more.
OpenWebKitSharp is a wrapper arount the WebKit engine (nightly) and is very advanced. Take a look at here (OpenWebKitSharp section): http://code.google.com/p/open-webkit-sharp/
Update 2016:
BrowseEmAll.Gecko
A .Net component which can be used to integrate the Firefox engine into your .Net application. This is based on Geckofx but unlike the current version of Geckofx this will work with a normal release build of Firefox. To use Geckofx you will need to build Firefox yourself. Again commercial support is available but the component itself is fully open source.
(Full disclosure: I work for this company so take everything I say with a grain of salt)
#Martin: Yes, the Adam Locke version is outdated. But that's because a separate distribution is not necessary. It's built with the rest of the Mozilla codebase now.
If you download Prism (ie XulRunner), that will give you a base that you can customize to your needs, and this includes the most recent version of the control (in the \Prism\xulrunner directory, you'll find mozctlx.dll).
#Greg: Actually, it is an ActiveX control. Incidentally, all ActiveX controls are COM controls. ActiveX is built on COM.
As of October 30, 2011, there is new information to add since the time of the previous posts. Specifically, while Skybound stopped maintaining their version, there is at least one actively maintained, free, open-source fork available.
I'm using Hindle's fork at BitBucket, which, by virtue of his tool which parses XpCom idls and creates c# wrappers, is rapidly updated with support for each new version of Firefox/Gecko.
See this post for an overview of other choices.
Additionally, if you find yourself using Gtk instead of Windows.Forms, there is a tarball of webkit-sharp available that allows for easy embedding of WebViews into Gtk# applications.
I Belive "Gecko FX"[1] is the thing you need.
To Quote from the web site
"""
GeckoFX is a Windows Forms control written in clean, commented C# that embeds the Mozilla Gecko browser control in any Windows Forms Application. It also contains a simple class model providing access to the HTML and CSS DOM.
"""
1) I can't post a link as "new users aren't allowed to add hyperlinks" Search for "geckofx" on google code.