Solved

URL in OnNavigateComplete2 event is sometimes wrong with TWebBrowser

Posted on 2002-05-19
6
1,069 Views
Last Modified: 2012-08-14
Hi,

I've noticed with some sites that the URL in OnNavigateComplete2 is sometimes wrong.  To demonstrate, add a TWebBrowser object to the form along with this code...

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.OleObject.Navigate('www.fish4jobs.co.uk');
end;

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  Caption := URL;
end;

When it is run and the page has loaded, the Caption wrongly contains something like...

http://ads.fish4.co.uk/RealMedia/ads/adstream_sx.ads/www.fish4jobs.co.uk/hp/1018476186@x08

when in fact the actual URL should be...

http://jobs.fish4.co.uk/jobs/index.jsp

Why is this?  I've noticed it happen with other sites too, such as the About.com sites.  It seems to be most noticable with sites that serve ads.  Do you know a work around to this problem?  When I view the sites in IE itself, I never get this problem.  I've tried EmbeddedWB, but it did not make any difference.  I'm using Delphi 4 Pro.

Thanks in Advance,

Richard
0
Comment
Question by:Richard2000
6 Comments
 
LVL 8

Expert Comment

by:Cesario
ID: 7020154
Dear Richard,

try this code:


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure FormCreate(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    StartNav : Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 StartNav := True;
 WebBrowser1.Navigate('www.fish4jobs.co.uk');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  IF StartNav
    then Caption := URL;
  StartNav := False;

end;
0
 
LVL 9

Expert Comment

by:ginsonic
ID: 7020835
listening
0
 

Author Comment

by:Richard2000
ID: 7022408
Hi,

Thanks for the code.  I've tried it, but I wonder if this method will sometimes prematurely get the URL?  For example, when I tried it the URL displayed in the caption was...

www.fish4jobs.co.uk

but when I tried it in Internet Explorer the URL I got was...

jobs.fish4.co.uk/jobs/index.jsp

Are there any other ways?

Richard
0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:Richard2000
ID: 7029236
Hi,

I think the problem occurs because of the frames in the web page.  Ads are often displayed in a separate frame, which is why it is most noticable with sites that display ads.  I would like the URL displayed in the Caption to be the same as when the page is opened up in Internet Explorer itself.  Is there any way of determining if the URL is a frame and ignore it?

Richard
0
 

Accepted Solution

by:
Richard2000 earned 0 total points
ID: 7037465
Hi,

The solution I've created so far is this...

procedure TMain.WebBrowserNavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  Document: OleVariant;
begin
  if VarIsEmpty(WebBrowser.Document) then Exit;

  Document := WebBrowser.Document;

  if Document.Frames.Length = 0 then Caption := URL;
end;

This seems to work fine for virtually all sites.  The only site I had a problem with when testing is www.swreg.org.  Sometimes, the Caption isn't set (yet sometimes it is).  Anyone know why?

Richard
0
 
LVL 1

Expert Comment

by:pnh73
ID: 9006022
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

PAQ and Refund

Please leave any comments here within the next seven days.
 
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!
 
Paul (pnh73)
EE Cleanup Volunteer
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now