Webbrowser a wersja IE - komunikat na stronie o starej wersji przeglądarki

0

WItam,
mam problem z webbrowserem i pewna stronka.
Otoz w delphi 7 klade webbrowser na forme i odpalam strone.
strona sie uruchamia, lecz wyskakuje komunikat na stronie, ze wykryto iz posiadam jakas stara wersje webbrwsera, a raczej ze moja wersja IE jest nieobslugiwana.
Zastanawia mnie fakt, czemu tak sie dzieje,
mam win 7 i IE bodajze w wersji 11, czyli nie takie stare - webbrowser z tego co wiem korzysta z IE obecnego w systemie, wiec dlaczego strona twierdzi, ze jest inaczej.

Czyzby to byla wina webbrowsera samego? Czyby webbrowser np z delphi XE5 pozwolilby na obsluge tej strony, ktora sprawdza agenta przegladarki?

1

A próbowałeś zmienić User-Agent? Jak to zrobić masz arta http://theroadtodelphi.wordpress.com/2011/03/11/changing-the-ua-user-agent-of-a-twebbrowser-component/ trzeba uważać, bo tak jak pisał ktoś w komentarzach po zmianie User-Agent nie zatrybi za pierwszym Navigate trzeba wywołać jakieś "lewe" czyli np:

  WebBrowser1.UserAgent:= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0'; //zmiana user agent (jak dodać właściwość UserAgent do WebBrowser jest we wspomnianym artykule)
  WebBrowser1.Navigate('about:blank'); //"lewe" navigate
  
  WebBrowser1.Navigate('http://tu_juz_mozna_dzialac :)');
0

thx, ale z tego co widze nie dziala to pod delphi 7... webbrowser nie ma wlasciwosci userAgent, a jej implementacja sie nie udaje ...czy moglby ktos to potwierdzic?
ewentualniue zaczekam na xe5, ktore mam dostac lada dzien...

0

WebBrowser nie ma właściwości UserAgent nawet pod Delphi XE5. Przecież napisałem że trzeba dodać tą właściwość nie rozumiesz artykułu? Masz cały przykładowy unit działający na Delphi 7:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, ActiveX, StdCtrls;

const
  DISPID_AMBIENT_USERAGENT = -5513;
 
type
  TWebBrowser = class (SHDocVw.TWebbrowser, IDispatch)
  private
    FUserAgent: string;
    procedure SetUserAgent (const Value: string);
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT; stdcall;
  public
    property UserAgent: string read FUserAgent write SetUserAgent;
    constructor Create(AOwner: TComponent); override;
  end;

  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TWebBrowser.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FUserAgent:='';
end;

function TWebBrowser.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT;
begin
  //check if the DISPID_AMBIENT_USERAGENT flag is being processed and if the User Agent to set is not empty
  if (FUserAgent <> '') and (Flags and DISPATCH_PROPERTYGET <> 0) and Assigned(VarResult) and (DispId=DISPID_AMBIENT_USERAGENT) then
  begin
    //set the user agent
    POleVariant(VarResult)^:= FUserAgent+#13#10;
    Result := S_OK; //return S_OK
  end
  else
  Result := inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr); //call the default Invoke method
end;

procedure TWebBrowser.SetUserAgent(const Value: string);
var
  Control: IOleControl;
begin
  FUserAgent := Value;
  //the current interface supports IOleControl?
  if DefaultInterface.QueryInterface(IOleControl, Control) = 0 then
    Control.OnAmbientPropertyChange(DISPID_AMBIENT_USERAGENT); //call the OnAmbientPropertyChange event
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://whatsmyuseragent.com/'); //tu otwieramy strone jaka chcemy :)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.UserAgent:= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0'; //zmiana user agent (jak dodać właściwość UserAgent do WebBrowser jest we wspomnianym artykule)
  WebBrowser1.Navigate('about:blank'); //"lewe" navigate
end;

end.
0

ok, powyzsza implementacja dziala, webbrowser 'wysyla' podrobionego useragenta... jednak strona ktora mnie interesuje ma chyba jakis dobry skrypt i wciaz wykrywa, ze mam stara przegladarke IE 7... piszac ze poczekam na XE5 mialem na mysli, nie to ze webbrowser bedzie mial user agenta, lecz moze ze bedzie obslugiwal IE w wersji nowszej...
Takze kod jest dobry (dzieki za niego), ale jednak nie rozwiazuje mojego problemu.

0

Ten komponent raczej nie korzysta z dostępnej wersji IE, tylko z tego, co ma zaimplementowane. To samo dzieje się w aplikacjach C#.
I oszukiwanie User Agenta nic tu nie zmieni w przypadku kiedy strona wykrywa czy przeglądarka posiada OBSŁUGĘ FUNKCJONALNOŚCI, a nie bada numerek wersji podanej w UA.
No i IE ma komentarze warunkowe - tego też nie obejdziesz na starym silniku IE.

Szybkie poszukiwania w Google (czego tego nie zrobiłeś? marnujesz nasz i swój czas ;]):

The current answer is not quite correct. It appears for compatibility purposes, the WebBrowser control will run in IE7 Standards Mode by default unless you add some registry settings.
See http://blogs.msdn.com/b/ie/archive/2008/03/18/webbrowser-control-rendering-modes-in-ie8.aspx and http://blogs.msdn.com/b/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx
So it's not quite the current IE version. You can also check this if you use fiddler or check the web server logs for the agent string - as it alters the agent string used too!

0

W XE5 WebBrowser faktycznie już na pierwszy rzut oka widać że się różni od tego z D7 ma zaimplementowanych więcej właściwości a przede wszystkim zdarzeń więc może mieć też zaimplementowane coś czego nie miał ten z Delphi 7 a jest konieczne do otwarcia tej strony.

EDIT
Możesz też wypróbować bardziej rozbudowaną (od tej z D7 z najnowszego Delphi nie wiem, bo jeszcze nie miałem okazji się dokładniej wnikać co dodano w WB z nowego Delphi) alternatywę TWebBrowser jaką jest TEmbeddedWB
http://sourceforge.net/projects/embeddedwb/

0

Sprawdzilem na XE5, ta sama sytuacja - paranoja :)

stestuje ten komponent powyzej (kiedys go uzywalem) ale to jest chyba jak pamietam nakladka na webbrowsera, wiec nie wroze sukcesu aczkolwiek sprobuje

0

To nie nakładka na WB (nie dziedziczy po WB) ale tak samo działa na interfejsach IE ale tak jak napisałem wyżej ma zaimplementowane znacznie więcej niż WB. Tak w ogóle możesz napisać z jaką stroną masz takie problemy?

0

niestety nie moge podac strony... prznajmniej nie publicznie.

co do embeded WB, to jest juz kilka lat nierozwijany a zgodnie z obecna polityka - dzialam na XE5 i tylko na komponentach, ktore rokują przyszlosciowo (poprawki, helpdesk itp)...

Ktos jeszcze ma jakies pomysly?

1 użytkowników online, w tym zalogowanych: 0, gości: 1