Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TMozillaBrowser und Proxy (https://www.delphipraxis.net/102469-tmozillabrowser-und-proxy.html)

smt 29. Okt 2007 14:51


TMozillaBrowser und Proxy
 
Hallo,

weiss zufälligerweise jemand, wie ich die TMozillaBrowser Komponente dazu bringe, daß Sie einen Proxy-Server benutzt?

Vielen Danke für alle Hinweise.

- Sascha -

marabu 29. Okt 2007 15:50

Re: TMozillaBrowser und Proxy
 
Herzlich willkommen in der Delphi-PRAXiS, Sascha.

Hast du diesen Absatz auf der HomePage des Controls gesehen?

Zitat:

...
How do I change preferences for the control, e.g. the proxy settings?

Edit the control profile's prefs.js and change the settings to those that you want.

Alternatively open about:config and configure the settings from there. You could also create a fresh profile in Mozilla / Firebird, change the settings from the preferences dialog and copy resultant the prefs.js over into the control's profile.
...
Freundliche Grüße vom marabu

smt 30. Okt 2007 11:46

Re: TMozillaBrowser und Proxy
 
Hallo marabu,

danke für den Hinweis.
Nein, diesen Text hab ich noch nicht gelesen gehabt - aber zumindest mal über die about:cofig Funktion geht es NICHT. Ich bekomme die Config zwar angezeigt und kann sie auch ändern, aber er speichert das nicht ab. Grundsätzlich kann ich es zwar in der Prefs.js ablegen, aber die Frage ist ja: Wo finde ich die - also programmtechnisch? Gibts da von Mozilla eine Funktion, die mir sagt, wo er danach sucht bzw. wo seine prefs.js liegt?
Sie liegt zwar in Dokumente/Einstellungen/Anwendungsdaten, etc. aber dann kommt irgendwas mit Profilen, wo ich nicht genau weiss, wie der Mozilla diese anlegt bzw. danach sucht.

Vielen Dank

- Sascha -

smt 31. Okt 2007 07:51

Re: TMozillaBrowser und Proxy
 
Habs hinbekommen...

Mit einer user.js funktioniert es. Der TMozillaBrowser legt auch ein entsprechenes Verzeichnis unter Anwendungsdaten an. Allerdings gibt es im Unterschied zum Firfox keine profiles.ini wo die Profilnamen drin stehen. Aber es gibt ja die tolle Funktion Findfirst wo man sich das entsprechende Verzeichnis heraussuchen kann. Ist zwar nicht die sauberste Lösung, aber sie funktioniert.

VG Sascha

mOfl 8. Aug 2008 00:29

Re: TMozillaBrowser und Proxy
 
Aloha,

ich push den Beitrag mal, weil ich eben das gleiche Problem hab. Wie/wo genau muss man eine .js-Datei anlegen oder ändern? Wenn man die selber anlegen muss, was für Befehle gibts da? Oder einfacher: Gibt es einfach eine Seite, wo das erklärt wird? Auf der angesprochenen Seite vom Autor der Control finde ich nämlich nicht einmal den zitierten Ausschnitt.

Ich würde die kleine Komponente nämlich gerne so gestalten, dass sie zum einen über einen Proxy-Server läuft, zum anderen keine Bilder anzeigt und schließlich auch keine Cookies akzeptiert.

Grüße
Dani

marabu 8. Aug 2008 07:51

Re: TMozillaBrowser und Proxy
 
Moin Dani,

nach meiner Beobachtung liest das Mozilla ActiveX Control die Datei prefs.js aus dem Ordner %INST_PATH%\defaults\pref\ ein, wobei %INST_PATH% das Installationsverzeichnis des Controls ist. Ich würde die Datei prefs.js von FireFox an diese Stelle kopieren. Alternativ kann an der gleichen Stelle auch die Datei user.js angelegt werden. Gelesen werden beide Dateien, aber es gibt gewisse Vorrangregeln: user_prefs() überschreiben prefs(), aber user_prefs() aus prefs.js haben Vorrang vor solchen in user.js, wenn ich mich nicht irre. Die Syntax ist die gleiche wie bei prefs.js, eine Beschreibung der Einträge findest du z.B. bei mozillaZine.

Freundliche Grüße

smt 8. Aug 2008 07:57

Re: TMozillaBrowser und Proxy
 
Also ich hab das folgendermassen gelöst:


Delphi-Quellcode:
function GetProxyInformation:string;
var
  ProxyInfo: PInternetProxyInfo;
  Len: LongWord;
begin
  Result := '';
  Len := 4096;
  GetMem(ProxyInfo, Len);
  try
    if InternetQueryOption(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then
      if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then
      begin
        Result := ProxyInfo^.lpszProxy
      end;
  finally
    FreeMem(ProxyInfo);
  end;
end;

{**************************************************************************
* NAME:   GetProxyServer
* DESC:   Proxy-Server Einstellungen abfragen
* PARAMS: protocol => z.B. 'http' oder 'ftp'
* RESULT: [-]
* CREATED: 08-04-2004/shmia
*************************************************************************}
procedure GetProxyServer(protocol:string; var ProxyServer:string; var ProxyPort:Integer);
var
  i : Integer;
  proxyinfo, ps : string;
begin
  ProxyServer := '';
  ProxyPort  := 0;

  proxyinfo := GetProxyInformation;
  if proxyinfo = '' then
    Exit;

  protocol := protocol+'=';

  i := Pos(protocol, proxyinfo);
  if i > 0 then
  begin
    Delete(proxyinfo, 1, i+Length(protocol));
    i := Pos(';', ProxyServer);
    if i > 0 then
      proxyinfo := Copy(proxyinfo, 1, i-1);
  end;

  i := Pos(':', proxyinfo);
  if i > 0 then
  begin
    ProxyPort := StrToIntDef(Copy(proxyinfo, i+1, Length(proxyinfo)-i), 0);
    ProxyServer := Copy(proxyinfo, 1, i-1)
  end
end;
und dann irgendwo später:

Delphi-Quellcode:
 with TRegistry.Create do
    try
      RootKey := HKEY_CURRENT_USER;
      OpenKey('\Software\Microsoft\Windows\CurrentVersion\' +
        'Explorer\Shell Folders', True);
        speicher_pfad:=ReadString('AppData');
    finally
      CloseKey;
      Free;
    end;

    getproxyserver('http',server,port);

    speicher_pfad :=speicher_pfad + '\MozillaControl\profiles\MozillaControl\';
    doserror:=Findfirst(speicher_pfad + '*.*',faDirectory,dt);
    WHILE doserror = 0 DO BEGIN
       IF (dt.name <> '.') and (dt.name <> '..') Then speicher_pfad:=speicher_pfad + dt.Name + '\';
       doserror:=Findnext(dt);
    END;

    // Hier die User-Prefs anlegen
    IF server <> '' THEN BEGIN
       ASSIGNFILE(datei,speicher_pfad + 'user.js');
       REWRITE(datei);
       Writeln(datei,'user_pref("network.proxy.http", "' + server + '");');
       Writeln(datei,'user_pref("network.proxy.http_port", ' + INTTOSTR(port) + ');');
       Writeln(datei,'user_pref("network.proxy.type", 1);');
       CLOSEFILE(datei);
    END ELSE IF FileExists(speicher_pfad + 'user.js') THEN deletefile(speicher_pfad + 'user.js');
also so hab ich es hinbekommen... wie gesagt, nicht besonders schön, aber es funktioniert.
Natürlich ist das einfache weglöschen der user.js wenn kein proxy mehr eingetragen ist nicht die feine englische art. Für die Anwendung, für die ich es benötigt hatte, reicht es aber aus. Deshalb diese Quick und Dirty Methode. Die Proxy-Einstellungen holt sich das Programm im übrigen aus den IE-Proxy Einstellungen. Aber das kann man ja machen wie man will.


VG Sascha


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz