XII: ServerController.OnBrowserCheck method
In IntraWeb XII we have the new event OnBrowserCheck
As previosly stated in another post, IntraWeb XII will officially support the following browsers:
- Firefox 3.6+
- Internet Explorer 8+
- Safari 5+
- Chrome 11+
- Opera 11+ (“tolerance mode” – See more info below)
IntraWeb XII allows the developer to make decisions regarding the browser your user is using to access your application through a new event in the ServerController.
TOnBrowserCheckEvent = procedure(aSession: TIWApplication; var rBrowser: TBrowser) of object;
The OnBrowserCheck event will be triggered everytime a new User Session is initiated and we have the following parameters:
The OnBrowserCheck parameters explained
aSession: TIWApplication – The current user session
rBrowser: TBrowser – holds the IntraWeb class that represents the user´s Browser
Current supported Browsers (and it’s class names):
- TSearchEngine (unit IW.Browser.SearchEngine)
- TOther (unit IW.Browser.Other)
- TFireFox (unit IW.Browser.Firefox)
- TInternetExplorer (unit IW.Browser.InternetExplorer)
- TWebkit (unit IW.Browser.Webkit)
- TSafariMobile (unit IW.Browser.SafariMobile)
- TSafari (unit IW.Browser.Safari)
- TChrome (unit IW.Browser.Chrome)
- TAndroid (unit IW.Browser.Android)
All these classes inherits from TBrowser (unit IW.Browser.Browser)
When rBrowser is of type TOther, IntraWeb generates an exception informing the browser is not supported. If you still want to support the unknown browser, you need to replace the object in rBrowser with a known browser class.
You need to include the unit of the Browser´s class in the uses clause (interface section):
- IW.Browser.Browser
- IW.Browser.Other
- IW.Browser.InternetExplorer
- IW.Browser.Safari
- IW.Browser.Chrome
- IW.Browser.Firefox
procedure TIWServerController.IWServerControllerBaseBrowserCheck(aSession: TIWApplication; var rBrowser: TBrowser);
var
MinVersion: Single;
begin
// unknown browser
if (rBrowser is TOther) then begin
rBrowser.Free;
// accept the unknown browser as Internet Explorer 8
rBrowser := TInternetExplorer.Create(8);
end
// if is Safari, but older version
else if (rBrowser is TSafari) and (not rBrowser.IsSupported) then begin
MinVersion := rBrowser.MinSupportedVersion;
rBrowser.Free;
// we will create it as the minimum supported version
rBrowser := TSafari.Create(MinVersion);
end
// if is Chrome, but older version
else if (rBrowser is TChrome) and (not rBrowser.IsSupported) then begin
MinVersion := rBrowser.MinSupportedVersion;
rBrowser.Free;
// we will create it as the minimum supported version
rBrowser := TChrome.Create(MinVersion);
end
// if is Firefox, but older version
else if (rBrowser is TFirefox) and (not rBrowser.IsSupported) then begin
MinVersion := rBrowser.MinSupportedVersion;
rBrowser.Free;
// we will create it as the minimum supported version
rBrowser := TFirefox.Create(MinVersion);
end
// if is IE, but older version
else if (rBrowser is TInternetExplorer) and (not rBrowser.IsSupported) then begin
MinVersion := rBrowser.MinSupportedVersion;
rBrowser.Free;
// we will create it as the minimum supported version
rBrowser := TInternetExplorer.Create(MinVersion);
end;
end;
Support for Web Crawlers / Search Engines
An additional class type is TSeachEngine, which informs your application is being access by a Web Crawler / Search Engine. If a Search Engine is trying to index your application, you can, for instance, terminate your session and redirect it to a HTML file (using aSession.TerminateAndRediret) in your website that contains the information you want to submit to the search engine.
Check the IntraWeb XII demos in CodePlex for a sample application (SEODemo) showing how to implement Search Engine support in your IntraWeb application.
EDeviceNotSupported Exception
If your application does not want to support the user browser, you can simply raise a EDeviceNotSupported (declared in the unit IWException) or terminate the session and redirect it to specific HTML file, for instance.
What means “Tolerance Mode” for Opera 11+ Browsers?
It menas that we will not make special efforts to support it but will not refuse requests from it. Only minimal testing will be performed using Opera, and while basic support may be offered, we will not dedicate significant resources if Opera has compatibilty issues.