Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

URL in OnNavigateComplete2 event is sometimes wrong with TWebBrowser

Posted on 2002-05-19
6
1,090 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
Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

 

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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

839 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