<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AB-WebLog.com&#187; Browser</title>
	<atom:link href="http://www.ab-weblog.com/de/schlagwort/browser/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ab-weblog.com/de</link>
	<description>Andreas Breitschopp</description>
	<lastBuildDate>Mon, 23 Nov 2015 08:51:46 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WordPress Multisite: Benutzer basierend auf ihrer Browser-Sprache weiterleiten</title>
		<link>http://www.ab-weblog.com/de/wordpress-multisite-benutzer-basierend-auf-ihrer-browser-sprache-weiterleiten/</link>
		<comments>http://www.ab-weblog.com/de/wordpress-multisite-benutzer-basierend-auf-ihrer-browser-sprache-weiterleiten/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 16:44:27 +0000</pubDate>
		<dc:creator>Andreas Breitschopp</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[mehrsprachig]]></category>
		<category><![CDATA[Multisite]]></category>
		<category><![CDATA[Plug-In]]></category>

		<guid isPermaLink="false">http://www.ab-weblog.com/de/?p=503</guid>
		<description><![CDATA[Seit ich den Artikel über den Multisite Language Switcher geschrieben habe, erhalte ich viele Fragen wie ich die Hauptseite &#8220;/&#8221; in meiner WordPress-Multisite-Konfiguration deaktiviert habe. Die Antwort ist simpel: Ich habe sie nicht deaktiviert, sondern lediglich eine eigene, kleine Theme erstellt, &#8230; <a href="http://www.ab-weblog.com/de/wordpress-multisite-benutzer-basierend-auf-ihrer-browser-sprache-weiterleiten/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Seit ich den Artikel über den <a title="Die Lösung für mehrsprachige Blogs mit WordPress" href="http://www.ab-weblog.com/de/die-loesung-fur-mehrsprachige-blogs-mit-wordpress/">Multisite Language Switcher</a> geschrieben habe, erhalte ich viele Fragen wie ich die Hauptseite &#8220;/&#8221; in meiner WordPress-Multisite-Konfiguration deaktiviert habe.</p>
<p>Die Antwort ist simpel: Ich habe sie nicht deaktiviert, sondern lediglich eine eigene, kleine Theme erstellt, welche sicher stellt, dass jeder Benutzer, der auf die Hauptseite &#8220;/&#8221; zugreift, auf die korrekte URL – in meinem Fall &#8220;/en/&#8221; oder &#8220;/de/&#8221; – weitergeleitet wird.</p>
<p>Der folgende Quelltext ist nicht vollständig von mir. Ich erinnere mich, dass ich einfach im Internet nach einer guten Lösung gesucht und diese nach meinen Bedürfnissen angepasst habe, aber das ist schon eine ganze Weile her. Daher weiß ich nicht mehr woher Teile des Quelltexts ursprünglich herstammen.</p>
<p>Egal, hier jedenfalls der Quelltext der Datei <em>index.php</em>, so wie ich sie aktuell in meiner Weiterleitungs-Theme für diese WordPress-Seite verwende:</p>
<pre>&lt;?php
/**
 * The main template file.
 *
 * This is the most generic template file in a WordPress theme
 * and one of the two required files for a theme (the other being style.css).
 * It is used to display a page when nothing more specific matches a query.
 * E.g., it puts together the home page when no home.php file exists.
 * Learn more: http://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage Redirect
 */

/**
 * Browser-Sprache ermitteln.
 *
 * @param array $allowed_languages Ein Datenfeld der Sprachen, die auf der Seite zur Verfügung stehen.
 * @param string $default_language Die zu verwendende Standardsprache, wenn keine ermittelt werden konnte.
 * @param string $lang_variable Benutzerdefinierte Sprachenunterstützung. Wenn nicht übergeben wird specified $_SERVER[&#039;HTTP_ACCEPT_LANGUAGE&#039;] verwendet.
 * @param string $strict_mode Wenn true (Standard) wird der gesamte Sprachencode (&quot;en-us&quot;) verwendet und nicht nur der linke Teil (&quot;en&quot;).
 * @return string Die ermittelte Browser-Sprache.
 */
function get_lang_from_browser($allowed_languages, $default_language, $lang_variable = NULL, $strict_mode = TRUE) {
    // $_SERVER[&#039;HTTP_ACCEPT_LANGUAGE&#039;] verwenden, wenn keine Sprachvariable mitgegeben wurde
    if (NULL === $lang_variable)
        $lang_variable = $_SERVER[&#039;HTTP_ACCEPT_LANGUAGE&#039;];

    // Wurde irgendwelche Information mitgeschickt?
    if (empty($lang_variable))
        return $default_language;

    // Den Header auftrennen
    $accepted_languages = preg_split(&#039;/,\s*/&#039;, $lang_variable);

    // Die Standardwerte einstellen
    $current_lang = $default_language;
    $current_q    = 0;
    // Nun alle mitgegebenen Sprachen abarbeiten
    foreach ($accepted_languages as $accepted_language) {
        // Alle Infos dieser Sprache rausholen
        $res = preg_match(
            &#039;/^([a-z]{1,8}(?:-[a-z]{1,8})*)&#039;.
            &#039;(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i&#039;,
            $accepted_language,
            $matches
        );

        if (!$res)
            continue;

        // Sprachcode holen und dann sofort in die Einzelteile trennen
        $lang_code = explode(&#039;-&#039;, $matches[1]);

        // Wurde eine Qualität mitgegeben?
        if (isset($matches[2]))
            $lang_quality = (float)$matches[2];
        else
            $lang_quality = 1.0;

        // Bis der Sprachcode leer ist...
        while (count($lang_code)) {
            // Prüfen, ob der Sprachcode angeboten wird
            if (in_array(strtolower(join(&#039;-&#039;, $lang_code)), $allowed_languages)) {
                // Qualität prüfen
                if ($lang_quality &gt; $current_q) {
                    $current_lang = strtolower(join(&#039;-&#039;, $lang_code));
                    $current_q = $lang_quality;
                    break;
                }
            }
            // Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
            if ($strict_mode)
                break;

            // Den rechtesten Teil des Sprachcodes abschneiden
            array_pop($lang_code);
        }
    }

    return $current_lang;
}

$allowed_langs = array(&#039;en&#039;, &#039;de&#039;);
$lang = get_lang_from_browser($allowed_langs, &#039;en&#039;, NULL, FALSE);
header(&#039;Location: http://&#039; . $_SERVER[&#039;HTTP_HOST&#039;] . &quot;/$lang/&quot;);

exit();
?&gt;</pre>
<p>Sie müssen also lediglich ein neues Theme-Verzeichnis anlegen und den obigen PHP-Quelltext (wenn nötig natürlich noch die erlaubten Sprachen anpassen) in eine Datei namens <em>index.php</em> kopieren.</p>
<p>Danach ist nur noch zusätzlich eine Dummy-Datei <em>style.css</em> mit einigen Infos zum Theme zu erstellen. Ansonsten wird WordPress Ihre Theme nicht erkennen:</p>
<pre>/*
Theme Name: Redirect
Theme URI: http://wordpress.org/extend/themes/redirect
Author: AB-WebLog.com
Author URI: http://www.ab-weblog.com
Description: Redirects
Version: 1.0
Tags: redirect
*/</pre>
<p>Das war&#8217;s: Nachdem Sie diese neue Theme für Ihre Hauptseite &#8220;/&#8221; ausgewählt haben, wir automatisch jeder Benutzer auf die korrekte Spracheversion basierend auf den Browser-Spracheinstellungen weiter geleitet.</p>
<p><em>Verwenden auch Sie den Multisite Language Switcher für Ihren Blog?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ab-weblog.com/de/wordpress-multisite-benutzer-basierend-auf-ihrer-browser-sprache-weiterleiten/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Entwicklung einer Browser-Toolbar: Zusammenfassung (5/5)</title>
		<link>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/</link>
		<comments>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/#comments</comments>
		<pubDate>Sat, 01 May 2010 14:00:18 +0000</pubDate>
		<dc:creator>Andreas Breitschopp</dc:creator>
				<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[ASPects]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Toolbar]]></category>
		<category><![CDATA[Veröffentlichung]]></category>

		<guid isPermaLink="false">http://www.ab-weblog.com/de/?p=302</guid>
		<description><![CDATA[Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den ASPects (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der Association of Shareware Professionals (ASP; Englisch), veröffentlicht wurde. Wie Sie gesehen haben, ist &#8230; <a href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em><em>Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den <a title="Webseite von ASPects" href="http://www.asp-shareware.org/about/aspects.asp" target="_blank">ASPects</a> (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der <a title="Webseite der Association of Shareware Professionals" href="http://www.asp-shareware.org/" target="_blank">Association of Shareware Professionals</a> (ASP; Englisch), veröffentlicht wurde.</em></em></p>
<p>Wie Sie gesehen haben, ist die Entwicklung einer Browser-Toolbar ein gutes Stück Arbeit, aber obwohl ich nicht jeden Schritt im Detail beschreiben konnte, so sollte das Erstellen einer eigener Toolbar nach dem Lesen dieser Artikelserie und besonders der verlinkten Tutorials doch zumindest schneller gehen.</p>
<p>Wenn Sie testen möchten, wie diese Toolbar auf Ihrem System funktioniert, können Sie ein entsprechendes Installationsprogramm von <a title="Webseite der AB-Tools.com Search Toolbar" href="http://www.ab-tools.com/de/software/searchtoolbar/" target="_blank">meiner Webseite</a> downloaden.</p>
<p>Zum Schluss möchte ich Sie noch dazu ermuntern jeden kleine Quelltext-Änderung in der Internet-Explorer-Toolbar auf sämtlichen, wichtigen Betriebssystemen (zumindest Windows XP, Vista und 7) und Browser-Versionen zu testen, da die Ergebnisse wirklich unterschiedlich ausfallen können – deutlich unterschiedlicher als bei der Entwicklung &#8220;normaler&#8221; Windows-Anwendungen.</p>
<p><em>Wie sind Ihre Erfahrungen mit dem Erstellen von Browser-Toolbars?</em></p>
<h2>Inhalt der Artikelserie &#8220;Entwicklung einer Browser-Toolbar&#8221;:</h2>
<ul>
<li><a title="Entwicklung einer Browser-Toolbar: Einführung (1/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/">Einführung</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/">Mozilla Firefox</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/">Microsoft Internet Explorer</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Installationssystem (4/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/">Installationssystem</a></li>
<li>Zusammenfassung</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Entwicklung einer Browser-Toolbar: Installationssystem (4/5)</title>
		<link>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/</link>
		<comments>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 14:00:38 +0000</pubDate>
		<dc:creator>Andreas Breitschopp</dc:creator>
				<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[ASPects]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Inno Setup]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Toolbar]]></category>
		<category><![CDATA[Veröffentlichung]]></category>

		<guid isPermaLink="false">http://www.ab-weblog.com/de/?p=297</guid>
		<description><![CDATA[Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den ASPects (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der Association of Shareware Professionals (ASP; Englisch), veröffentlicht wurde. Jetzt haben wir eine Toolbar &#8230; <a href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em><em>Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den <a title="Webseite von ASPects" href="http://www.asp-shareware.org/about/aspects.asp" target="_blank">ASPects</a> (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der <a title="Webseite der Association of Shareware Professionals" href="http://www.asp-shareware.org/" target="_blank">Association of Shareware Professionals</a> (ASP; Englisch), veröffentlicht wurde.</em></em></p>
<p>Jetzt haben wir eine Toolbar für Internet Explorer und Firefox, aber wie bekommen wir diese installiert? Es gibt nur ein Installationstool, das ich auch für sämtliche meiner anderen Produkte verwende und dass so ziemlich alles kann: <a title="Webseite von Inno Setup" href="http://www.jrsoftware.org/isinfo.php" target="_blank">Inno Setup</a> (Englisch). Im Folgenden lesen Sie, was Sie für die Installation der beiden Toolbar-Versionen benötigen.</p>
<h2>Toolbar-Installation im Mozilla Firefox</h2>
<p>Wieder ist es sehr viel einfacher eine neue Toolbar im Firefox-Browser zu installieren. Sie müssen Ihre XPI-Datei lediglich in das Firefox-Erweiterungsverzeichnis kopieren. Die Toolbar wird dann beim nächsten Browser-Start installiert. Somit benötigen wir lediglich eine Pascal-Funktion in unserem Inno-Setup-Quelltext, die uns das Erweiterungsverzeichnis des Firefox‘ zurückgibt:</p>
<pre class="brush: pascal; gutter: true">function GetFirefoxExtensionsPath(Param: String): String;
var
    FirefoxVersion, FirefoxInstallPath: string;
begin
    if (RegQueryStringValue(HKLM, 'SOFTWARE\Mozilla\Mozilla Firefox',
            'CurrentVersion', FirefoxVersion)) then begin
        if (RegQueryStringValue(HKLM, 'SOFTWARE\Mozilla\Mozilla Firefox\' + FirefoxVersion +
                '\Main', 'Install Directory', FirefoxInstallPath)) then begin
            if (not DirExists(FirefoxInstallPath +
                   '\extensions\toolbarebay@ab-tools.com')) then begin
                Result := FirefoxInstallPath + '\extensions';
            end;
        end;
    end;
end;</pre>
<h2>Toolbar-Installation im Microsoft Internet Explorer</h2>
<p>Um die Toolbar im Internet Explorer zu installieren, müssten wir zunächst die s<em>trongly-named Assembly</em> im <em>Global Assembly Cache</em> (GAC) mittels des <em>gacinstall</em>-Kennzeichens, verfügbar in der aktuellen Inno-Setup-Version, im <em>file</em>-Bereich registrieren. Zusätzlich müssen wir einige Registry-Änderungen durchführen. Sie können den folgenden Quelltext in den <em>registry</em>-Bereich Ihres Inno-Setup-Skriptes kopieren und sämtliche Variablen durch Ihre eigenen ersetzen (ich habe den Inno-Setup-Syntax ein wenig verkürzt, um es etwas kompakter zu bekommen):</p>
<pre class="brush: text; gutter: true">HKCR: CLSID\{{%GUID%}; Flags: uninsdeletekey
HKCR: CLSID\{{%GUID%}; ValueType: string; ValueName: ; ValueData: %LONG_NAME%
HKCR: CLSID\{{%GUID%}; ValueType: string; ValueName: MenuText; ValueData: %LONG_NAME%
HKCR: CLSID\{{%GUID%}; ValueType: string; ValueName: HelpText; ValueData: %DESCRIPTION%
HKCR: CLSID\{{%GUID%}\Implemented Categories\{{00021494-0000-0000-C000-000000000046}
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ; ValueData: mscoree.dll
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Both
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Class; ValueData: %CLASS%
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Assembly; ValueData: %NAMESPACE%, Version=%VERSION%, Culture=neutral, PublicKeyToken=%PUBLIC_KEY%
HKCR: CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: RuntimeVersion; ValueData: v2.0.50727
HKLM: Software\Classes\CLSID\{{%GUID%}; Flags: uninsdeletekey
HKLM: Software\Classes\CLSID\{{%GUID%}; ValueType: string; ValueName: ; ValueData: %LONG_NAME%
HKLM: Software\Classes\CLSID\{{%GUID%}; ValueType: string; ValueName: MenuText; ValueData: %LONG_NAME%
HKLM: Software\Classes\CLSID\{{%GUID%}; ValueType: string; ValueName: HelpText; ValueData: %DESCRIPTION%
HKLM: Software\Classes\CLSID\{{%GUID%}\Implemented Categories\{{00021494-0000-0000-C000-000000000046}
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ; ValueData: mscoree.dll
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Both
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Class; ValueData: %CLASS%
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: Assembly; ValueData: %NAMESPACE%, Version=%VERSION%, Culture=neutral, PublicKeyToken=%PUBLIC_KEY%
HKLM: Software\Classes\CLSID\{{%GUID%}\InprocServer32; ValueType: string; ValueName: RuntimeVersion; ValueData: v2.0.50727
HKLM: SOFTWARE\Microsoft\Internet Explorer\Toolbar; ValueType: string; ValueName: {{%GUID%}; ValueData: %LONG_NAME%
HKLM: SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{{%GUID%}; Flags: uninsdeletekey
HKLM: SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{{%GUID%}; ValueType: dword; ValueName: NoExplorer; ValueData: 1</pre>
<p>Um keinen unnötigen Müll auf den Computer des Benutzers zu schreiben, sollten die Registry-Änderungen nur durchgeführt und die Dateien nur kopiert werden, wenn das .NET-Framework 2.0 (oder neuer) auf dem System installiert ist, da dieses – wie bereits weiter oben geschrieben – für die Internet-Explorer-Toolbar benötigt wird. Sie können die Verfügbarkeit des .NET-Framework 2.0 relativ einfach mit folgender Pascal-Funktion überprüfen:</p>
<pre class="brush: pascal; gutter: true">function CheckForDotNet(): Boolean;
begin
    Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
end;</pre>
<p>Dies waren die Schritte, um ein Inno-Setup-Installationsprogramm für beide Toolbar-Versionen zu erstellen. Natürlich können Sie diese in einer einzigen Setup-Datei, welche die Internet-Explorer- sowie die Firefox-Version – je nachdem welcher Browser auf dem System vorhanden ist – installiert, zusammenfassen.</p>
<p>Der <a title="Entwicklung einer Browser-Toolbar: Zusammenfassung (5/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/">letzte Artikel</a> wird eine kurze Zusammenfassung sein.</p>
<h2>Inhalt der Artikelserie &#8220;Entwicklung einer Browser-Toolbar&#8221;:</h2>
<ul>
<li><a title="Entwicklung einer Browser-Toolbar: Einführung (1/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/">Einführung</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/">Mozilla Firefox</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/">Microsoft Internet Explorer</a></li>
<li>Installationssystem</li>
<li><a title="Entwicklung einer Browser-Toolbar: Zusammenfassung (5/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/">Zusammenfassung</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5)</title>
		<link>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/</link>
		<comments>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 15:00:19 +0000</pubDate>
		<dc:creator>Andreas Breitschopp</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASPects]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Toolbar]]></category>
		<category><![CDATA[Veröffentlichung]]></category>

		<guid isPermaLink="false">http://www.ab-weblog.com/de/?p=295</guid>
		<description><![CDATA[Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den ASPects (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der Association of Shareware Professionals (ASP; Englisch), veröffentlicht wurde. Die erste zu treffende Entscheidung &#8230; <a href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em><em>Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den <a title="Webseite von ASPects" href="http://www.asp-shareware.org/about/aspects.asp" target="_blank">ASPects</a> (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der <a title="Webseite der Association of Shareware Professionals" href="http://www.asp-shareware.org/" target="_blank">Association of Shareware Professionals</a> (ASP; Englisch), veröffentlicht wurde.</em></em></p>
<p>Die erste zu treffende Entscheidung ist die Programmiersprache, welche Sie für die Entwiclung der Internet-Explorer-Toolbar verwenden möchten. Bei meinen Recherchen im Internet fand ich Beispiele für C++, Visual Basic 6 und .NET. Es scheint einige Visual-Style-Probleme zu geben, wodurch die Toolbar bei System mit Windows Vista und Windows 7 nicht sonderlich gut aussieht, wenn C++ verwendet wird. Und nachdem ich wirklich keine Lust hatte noch in Visual Basic 6 zu entwickeln, entschied ich mich für .NET. Der einzige Nachteil dieser Entscheidung war, dass der Benutzer das .NET Framework 2.0 (oder neuer) auf seinem System installiert haben muss. Damit kann ich jedoch leben, da es bereits sehr verbreitet ist.</p>
<p>Aufgrund dessen, dass fast alle meine Produkte in .NET entwickelt sind, hatte ich bereits Visual Studio 2008 auf meinem Computer installiert. Falls Sie das nicht haben, benötigen Sie zumindest die <a title="Webseite der Microsoft Visual Studio Express Edition" href="http://www.microsoft.com/germany/express/" target="_blank">Express Edition</a> (Version 2005 sollte auch ausreichen) für die nächsten Schritte. Ich entschied die Toolbar in C# zu entwickeln, aber mit Visual Basic .NET ginge das selbstverständlich auch.</p>
<p>Als ein guter Ausgangspunkt fand ich <a title="Explorer-Erweiterung mit Band Objects unter Verwendung von .NET und Windows Forms" href="http://www.codeproject.com/KB/shell/dotnetbandobjects.aspx" target="_blank">diesen</a> (Englisch) und <a title="Internet-Explorer-Toolbar-Erstellung" href="http://www.codeproject.com/KB/shell/IEToolbar.aspx" target="_blank">diesen</a> (Englisch) Artikel auf der Code-Project-Webseite. Falls Sie mehr über die COM-Komponente wissen möchten, können Sie auch das <a title="Internet Explorer Toolbar (Deskband) Tutorial" href="http://www.codeproject.com/KB/shell/ietoolbartutorial.aspx" target="_blank">C++-Tutorial</a> (Englisch) lesen, aber das ist nicht unbedingt erforderlich. Unter Verwendung der Beispiel-Quelltexte dieser beiden Artikel, sollten Sie eine funktionierende Toolbar erhalten – zumindest auf einem Windows-XP-System. Jedoch stieß ich auf einige Probleme, die behoben werden mussten und die ich daher im Folgenden näher beschreiben werde:</p>
<h2>Sicherstellen, dass die Toolbar auf sämtlichen Betriebssystemen korrekt angezeigt wird</h2>
<p>Mit dem Demo-Quelltext der oben erwähnten Artikel habe ich die Toolbar ziemlich schnell auf meinem Windows-XP-Testrechner zum Laufen bekommen. Naiverweise ging ich davon aus, dass die Toolbar, die auf Windows XP mit Internet Explorer 8 korrekt funktioniert, auch auf Windows Vista und Windows 7 mit derselben Internet-Explorer-Version funktionieren würde. Aber tatsächlich musste ich lernen, dass dies absolut nicht der Fall ist! Sie wurde entweder überhaupt nicht dargestellt oder soweit auf der rechten Seite, dass man sie nur mit einer horizontalen Auflösung von mindestens 2.000 Pixel sehen konnte. Somit musste ich nach einer Lösung suchen, jedoch die meisten Quelltextänderungen führten nur dazu, dass die Toolbar entweder auf dem einen oder dem anderen Betriebssystem beziehungsweise der einen oder anderen Browserversion funktionierte. Nach einigen Stunden frustrierendem Testen, habe ich die <em>GetBandInfo</em>-Funktion der <em>BandObjectsLib</em>-Klasse wie folgt geändert. Obwohl ich nach wie vor nicht ganz sicher bin weswegen, so funktioniert es nun auf allen Betriebssysteme problemlos:</p>
<pre class="brush: csharp; gutter: true">public virtual void GetBandInfo(UInt32 dwBandID, UInt32 dwViewMode, ref DESKBANDINFO dbi)
{
    if ((dbi.dwMask &amp; DBIM.MINSIZE) != 0)
    {
        dbi.ptMinSize.X = this.MinimumSize.Width;
        dbi.ptMinSize.Y = this.MinimumSize.Height;
    }

    if ((dbi.dwMask &amp; DBIM.MAXSIZE) != 0)
    {
        dbi.ptMaxSize.X = this.MaximumSize.Width;
        dbi.ptMaxSize.Y = this.MaximumSize.Height;
    }

    if ((dbi.dwMask &amp; DBIM.ACTUAL) != 0)
    {
        dbi.ptActual.X = this.Size.Width;
        dbi.ptActual.Y = this.Size.Height;
    }

    if ((dbi.dwMask &amp; DBIM.BKCOLOR) != 0)
    {
        dbi.dwMask &amp;= ~DBIM.BKCOLOR;
    }

    dbi.dwModeFlags = DBIMF.BREAK;
}</pre>
<h2>Hübschere Darstellung auf Windows XP und neuer</h2>
<p>Wenn Sie den folgenden Ereignis-Handler in der <em>BandObjectsLib</em>-Klasse nicht hinzufügen, wird Ihre Toolbar zwar dennoch funktionieren, aber einfach nicht sonderlich schön auf Windows XP und neuer aussehen. Die <em>if</em>-Anweisung in der Ereignisfunktion stellt dabei sicher, dass die Toolbar auch auf älteren Betriebssystemen wie Windows 98, 2000 und ME nach wie vor funktioniert. Ansonsten würde es zu einer Ausnahme auf diesen Betriebssystemen kommen. Hier ist der Quelltext, den ich verwendet habe, um es auf sämtliche Betriebssystem korrekt zum Laufen zu bringen:</p>
<pre class="brush: csharp; gutter: true">[DllImport("uxtheme", ExactSpelling = true)]
public extern static Int32 DrawThemeParentBackground(IntPtr hWnd, IntPtr hdc,
                                                     ref Rectangle pRect);

protected override void OnPaintBackground(PaintEventArgs e)
{
    if (System.Environment.OSVersion.Platform &gt;= PlatformID.Win32NT &amp;&amp;
           (Environment.OSVersion.Version.Major == 5 &amp;&amp;
            Environment.OSVersion.Version.Minor &gt;= 1 ||
            Environment.OSVersion.Version.Major &gt;= 6) &amp;&amp;
           this.BackColor == Color.Transparent)
    {
        // Only if operating system is Windows XP or higher
        IntPtr hdc = e.Graphics.GetHdc();
        Rectangle rec = new Rectangle(e.ClipRectangle.Left,
            e.ClipRectangle.Top, e.ClipRectangle.Width, e.ClipRectangle.Height);
        DrawThemeParentBackground(this.Handle, hdc, ref rec);
        e.Graphics.ReleaseHdc(hdc);
    }
    else
    {
        base.OnPaintBackground(e);
    }
}</pre>
<h2>Keine Serialisierung erlaubt</h2>
<p>Bei der Entwicklung einer Firefox-Toolbar können Sie den Mozilla-Preferences-Dienst verwenden, um benutzerdefinierte Werte direkt innerhalb Firefox abzuspeichern und zu laden. Da es im Internet Explorer kein Gegenstück dazu gibt und ich XML-Serialisierung in vielen anderen .NET-Produkten verwende, wollte ich diese in dem Toolbar-Projekt ebenfalls verwenden. Auf den ersten Blick funktionierte das auch einwandfrei, aber wenn im Internet Explorer 8 der <em>Protected Mode</em> aktiviert ist (und das ist er standardmäßig, zumindest seit Windows Vista), bekommt der Benutzer ein hässliches Warnungsfenster jedes Mal angezeigt, wenn die Toolbar initialisiert wird. Den Grund dafür werde ich nun nicht im Detail erläutern; verwenden Sie einfach keine Serialisierung in Internet-Explorer-Toolbars. Sie können benutzerdefinierte Werte entweder ohne Serialisierung im Dateisystem unterhalb des lokalen Anwendungsdatenverzeichnisses abspeichern oder einfach die Registry verwenden.</p>
<h2>Automatisches Online-Update</h2>
<p>Wie in der Firefox-Version, wollte ich auch, dass die Internet-Explorer-Toolbar eine automatische Update-Funktion beinhaltet. Da es jedoch kein Update-System für Toolbars wie im Firefox gibt, musste ich ein eigenes implementieren. Dies ist jedoch relativ einfach, zumal man – wie auch in anderen .NET-Anwendungen – einfach die <em>WebClient</em>-Klasse verwenden kann, um zunächst eine HTTP-Anfrage zu machen, ob ein Update verfügbar ist, und um danach die Update-Datei herunterzuladen, falls erforderlich. Auf der Serverseite nutze ich eine kleines PHP-Skript, das sich um die Update-Anfrage kümmert. Die Update-Datei, die heruntergeladen wird, ist die normale Setup-Datei, welche einfach sämtliche Dateien mit neuen überschreibt. Das Einzige, auf was Sie achten müssen, ist die Art und Weise, wie Sie die ausführbare Setup-Datei nach dem Download aufrufen, da ansonsten ein Dialog der Benutzerkontensteuerung (UAC) angezeigt wird. Ich habe folgende Prozedur geschrieben, die Sie verwenden können, um eine Datei aus der Toolbar heraus auszuführen, ohne dass irgendeine Warnung dem Benutzer angezeigt wird:</p>
<pre class="brush: csharp; gutter: true">private void startProcess(string fileName, string arguments)
{
    System.Diagnostics.ProcessStartInfo startInfo =
        new System.Diagnostics.ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.WorkingDirectory = Environment.CurrentDirectory;
    startInfo.FileName = fileName;
    if (Environment.OSVersion.Platform &gt;= PlatformID.Win32NT &amp;&amp;
            Environment.OSVersion.Version.Major &gt;= 6)
        // Only if operating system is Windows Vista or higher
        startInfo.Verb = "runas";
    else
        startInfo.Verb = "open";
    startInfo.Arguments = arguments;
    startInfo.ErrorDialog = true;
    try
    {
        System.Diagnostics.Process process = System.Diagnostics.Process.Start(startInfo);
        process.WaitForExit();

        MessageBox.Show(objToolbarData["msg.restartBrowserText"],
                        objToolbarData["msg.restartBrowserTitle"],
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        if (debugMode) MessageBox.Show(ex.ToString());
    }
}</pre>
<h2>Deinstallationsschaltfläche innerhalb der Toolbar</h2>
<p>Das war das Einzige, was im Internet Explorer einfacher zu implementieren war als im Firefox; es muss lediglich das Deinstallationsprogramm (wieder mit der <em>startProcess</em>-Prozedur von oben) des Installationssystems (siehe nächster Post###) ausgeführt werden, um die Toolbar wieder zu deinstallieren. Nach einem Browser-Neustart wird sie dann nicht mehr angezeigt (wie auch beim Firefox).</p>
<p>Geschafft; die Internet-Explorer-Version von unserer Toolbar ist nun auch fertig! Sie wird mit Internet Explorer 6 oder neuer auf Windows 98 oder neuer mit installiertem .NET Framework 2.0 funktionieren.</p>
<p>Im <a title="Entwicklung einer Browser-Toolbar: Installationssystem (4/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/">nächsten Artikel</a> werde ich erklären, wie die Toolbars installiert werden.</p>
<h2>Inhalt der Artikelserie &#8220;Entwicklung einer Browser-Toolbar&#8221;:</h2>
<ul>
<li><a title="Entwicklung einer Browser-Toolbar: Einführung (1/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/">Einführung</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/">Mozilla Firefox</a></li>
<li>Microsoft Internet Explorer</li>
<li><a title="Entwicklung einer Browser-Toolbar: Installationssystem (4/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/">Installationssystem</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Zusammenfassung (5/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/">Zusammenfassung</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5)</title>
		<link>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/</link>
		<comments>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:00:34 +0000</pubDate>
		<dc:creator>Andreas Breitschopp</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ASPects]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Toolbar]]></category>
		<category><![CDATA[Veröffentlichung]]></category>

		<guid isPermaLink="false">http://www.ab-weblog.com/de/?p=291</guid>
		<description><![CDATA[Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den ASPects (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der Association of Shareware Professionals (ASP; Englisch), veröffentlicht wurde. Die Entwicklung einer Toolbar für &#8230; <a href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em><em>Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den <a title="Webseite von ASPects" href="http://www.asp-shareware.org/about/aspects.asp" target="_blank">ASPects</a> (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der <a title="Webseite der Association of Shareware Professionals" href="http://www.asp-shareware.org/" target="_blank">Association of Shareware Professionals</a> (ASP; Englisch), veröffentlicht wurde.</em></em></p>
<p>Die Entwicklung einer Toolbar für Firefox ist relative einfach: Alles geschieht mit XML, einem bisschen CSS und besonders JavaScript. Das Letzte ist auch der einzige Knackpunkt an der Sache, da ich die Entwicklung in JavaSkript schlicht und ergreifend nicht mag. Aber wie auch immer, es ist in diesem Fall ziemlich unkompliziert.</p>
<p>Ich habe eine sehr gute <a title="Tutorial zur Firefox-Toolbar-Entwicklung" href="http://www.borngeek.com/firefox/toolbar-tutorial/" target="_blank">Seite im Internet gefunden</a> (Englisch). Dieses Tutorial erklärt die Entwicklung einer Firefox-Toolbar im Detail und ersparte mir eine Menge an Recherche-Arbeit. Nachdem Sie das Online-Tutorial durchgegangen sind, sollten Sie bereits eine voll funktionsfähige Firefox-Toolbar haben. Danach sind nur zwei Dinge übrig:</p>
<h2>Automatisches Online-Update</h2>
<p>Ich wollte, dass meine Toolbar mit automatischen Updates von meinem Webserver versorgt wird. Das ist jedoch ziemlich einfach, wenn man das integrierte Update-System des Firefox&#8217; verwendet. Auf derselben Seite gibt es auch ein gutes Tutorial über das Hinzufügen einer <a title="Tutorial zum automatischen Firefox-Erweiterungsupdate" href="http://www.borngeek.com/firefox/automatic-firefox-extension-updates/" target="_blank">automatischen Update-Funktion</a> (Englisch).</p>
<h2>Deinstallationsschaltfläche innerhalb der Toolbar</h2>
<p>Das schlechte Image von Toolbars basiert sicherlich nicht zuletzt auf der Tatsache, dass die meisten wirklich schwierig zu deinstallieren sind. Obwohl Firefox bereits eine Deinstallationsunterstützung mit dem Add-On-Manager für den Benutzer anbietet, wollte ich eine Deinstallationsschaltfläche direkt in die Toolbar selbst integrieren. Nachdem ich im Internet und im <a title="Webseite des Mozilla Developer Center" href="https://developer.mozilla.org/de" target="_blank">Mozilla Developer Center</a> etwas recherchiert habe, entwickelte ich folgendes Stück Quelltext, das zunächst die Toolbar erfolgreich deinstalliert, danach dem Benutzer eine Webseite (irgendetwas wie &#8220;Schade, dass Sie die Toolbar deinstalliert haben…&#8221;) anzeigt und zum Schluss dem Benutzer mitteilt, dass ein Browser-Neustart zum Abschluss der Deinstallation nötig ist:</p>
<pre class="brush: javascript; gutter: true">try {
    var tb = document.getElementById('ABTools-Toolbar');
    var text = ABTools_ToolbarData["msg.uninstallToolbarText"].replace("%name%",
                                   ABTools_ToolbarData["toolbar.name"]);
    if (!window.confirm(text))
        return;

    var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"]
                            .getService(Components.interfaces.nsIExtensionManager);
    var rds = gExtensionManager.datasource;
    if (gExtensionManager.uninstallItem) gExtensionManager.uninstallItem(ABTools_id);
    if (gExtensionManager.uninstallExtension)
        gExtensionManager.uninstallExtension(ABTools_id);

    ABTools_guid = "";
    ABTools_saveSettings();

    ABTools_LoadURL(getABToolsHomepageLink(9));

    alert(ABTools_ToolbarData["msg.restartBrowserText"]);
} catch(e) {
    if (ABTools_DebugMode) alert(e);
}</pre>
<p>Nach diesen Schritten ist Ihre Firefox-Toolbar fertig für die Installation! Sie funktioniert auf Firefox Version 1.5 oder neuer, unabhängig vom Betriebssystem.</p>
<p>Im <a title="Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/">nächsten Artikel</a> kommen wir zum komplizierteren Browser.</p>
<h2>Inhalt der Artikelserie &#8220;Entwicklung einer Browser-Toolbar&#8221;:</h2>
<ul>
<li><a title="Entwicklung einer Browser-Toolbar: Einführung (1/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/">Einführung</a></li>
<li>Mozilla Firefox</li>
<li><a title="Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/">Microsoft Internet Explorer</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Installationssystem (4/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/">Installationssystem</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Zusammenfassung (5/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/">Zusammenfassung</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Entwicklung einer Browser-Toolbar: Einführung (1/5)</title>
		<link>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/</link>
		<comments>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 15:00:24 +0000</pubDate>
		<dc:creator>Andreas Breitschopp</dc:creator>
				<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[ASPects]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Toolbar]]></category>
		<category><![CDATA[Veröffentlichung]]></category>

		<guid isPermaLink="false">http://www.ab-weblog.com/de/?p=289</guid>
		<description><![CDATA[Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den ASPects (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der Association of Shareware Professionals (ASP; Englisch), veröffentlicht wurde. Neben kommerziellen Produkten, die ich &#8230; <a href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Diese Artikelserie ist die deutsche Übersetzung meines Artikels &#8220;Developing a Browser Toolbar&#8221;, der in den <a title="Webseite von ASPects" href="http://www.asp-shareware.org/about/aspects.asp" target="_blank">ASPects</a> (Englisch) im Januar 2010 (Jahrgang 23, Ausgabe 1), ein Magazin der <a title="Webseite der Association of Shareware Professionals" href="http://www.asp-shareware.org/" target="_blank">Association of Shareware Professionals</a> (ASP; Englisch), veröffentlicht wurde.</em></p>
<p>Neben kommerziellen Produkten, die ich direkt an Kunden verkaufe, habe ich in den vergangenen Jahren auch einige Freeware-Produkte erstellt. Dies ist nicht der richtige Platz, um die Vor- und Nachteile von Toolbars zu diskutieren, aber ich habe entschieden, dass die Integration einer Toolbar in die Installationsprogramme meiner Produkte ein guter Weg wäre, um mit meinen Freeware-Produkten Geld zu verdienen.</p>
<p>Daher habe ich mit einem deutschen Werbeunternehmen zusammengearbeitet, die mich mit einer einsatzbereiten Toolbar versorgt haben. Da es jedoch vor einiger Zeit zu erheblichen Problemen mit deren Toolbar kam, entschied ich eine eigene Toolbar zu entwickeln.</p>
<p>Ich werde die einzelnen Schritte zur Entwicklung einer Browser-Toolbar nicht im Detail beschreiben können, sonst geht uns hier der Platz aus. Möchten Sie jedoch in der Zukunft eine eigene Toolbar erstellen, kann ich Ihnen einige Tipps und Links zu guten Ressourcen mitgeben, welche diese Herausforderung zumindest deutlich leichter machen werden – und falls Sie Hilfe benötigen, fragen Sie in der <em>.technical</em> Newsgroup der ASP (oder schreiben Sie unten einfach einen Kommentar).</p>
<p>Zunächst musste ich festlegen, auf welchen Browsern die Toolbar funktionieren sollte. Selbstverständlich habe ich sofort zwei Browser in Betracht gezogen: Internet Explorer und Firefox. Auch auf Opera und Chrome habe ich einen Blick geworfen, aber beide Browser hatten keine richtige Add-On-Unterstützung und daher habe ich mich zunächst auf Internet Explorer und Firefox – die am meisten verbreiteten Browser – konzentriert.</p>
<p>Nachdem ich mich in das Thema eingelesen hatte, stellte ich fest, dass der Internet Explorer dem Entwickler auch in diesem Bereich das Leben schwer macht. Daher fange ich im <a title="Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/">nächsten Artikel</a> mit dem einfacherer von beiden an.</p>
<h2>Inhalt der Artikelserie &#8220;Entwicklung einer Browser-Toolbar&#8221;:</h2>
<ul>
<li>Einführung</li>
<li><a title="Entwicklung einer Browser-Toolbar: Mozilla Firefox (2/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-mozilla-firefox/">Mozilla Firefox</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Microsoft Internet Explorer (3/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-microsoft-internet-explorer/">Microsoft Internet Explorer</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Installationssystem (4/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-installationssystem/">Installationssystem</a></li>
<li><a title="Entwicklung einer Browser-Toolbar: Zusammenfassung (5/5)" href="http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-zusammenfassung/">Zusammenfassung</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ab-weblog.com/de/entwicklung-einer-browser-toolbar-einfuehrung/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->