24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
1

Отслеживание переходов в браузере (стороннем или компоненте)

28.05.2014, 20:53. Показов 1626. Ответов 8
Метки нет (Все метки)

Есть задача: необходимо отобразить определенную страницу (в самой программе или открыть сторонний браузер). Далее необходимо уловить переход пользователя по определенной ссылке и выполнить определенные действия.
Как такое реализовать в Lazarus'e?

Заранее благодарю за помощь!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2014, 20:53
Ответы с готовыми решениями:

Отслеживание текущей открытой Активити в запущенном стороннем приложении
Мне необходимо отследить какая Активити запущена в стороннем приложении в текущий момент для целей...

Изменить текст в стороннем браузере
здравствуйте. такой вопрос можно ли приложение получить доступ к странице в браузере, например...

Программно нажать кнопку на открытой в стороннем браузере веб-странице (cpp Builder 6)
Здравствуйте! Помогите разобраться с одной прикладной задачкой! Суть в следующем: допустим на...

Определить количество переходов из 1 в 0 или из 0 в 1
С устройства ввода последовательно поступают 1 и 0. Определить количество переходов из 1 в 0 или из...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31152 / 20360 / 7929
Регистрация: 22.10.2011
Сообщений: 35,292
Записей в блоге: 6
28.05.2014, 23:25 2
Стандартного компонента типа TWebBrowser-а для Лазаруса не существует. А со взаимодействием со сторонними браузерами могут быть очень серьезные проблемы. Хотя бы укажи для какой ОС это все делается, или тебе нужна кроссплатформенная программа?
0
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
30.05.2014, 17:16 3
Можно попробовать подцепить IE - ieframe.dll (только под windows)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31152 / 20360 / 7929
Регистрация: 22.10.2011
Сообщений: 35,292
Записей в блоге: 6
30.05.2014, 17:53 4
И потом ТС скажет, что это надо было под Linux... Так что я лучше дождусь его ответа...
0
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
01.06.2014, 12:16  [ТС] 5
UI,
только для Windows (XP, 7, 8)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31152 / 20360 / 7929
Регистрация: 22.10.2011
Сообщений: 35,292
Записей в блоге: 6
01.06.2014, 16:59 6
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цитата Сообщение от Kotlerman Посмотреть сообщение
только для Windows (XP, 7, 8)
В таком случае для решения этой задачи нужен LazActiveX. Последовательность действий такая:
1. Заходим в меню Пакет -> Установить /удалить пакеты, выбираем в пакетах, доступных для установки LazActiveX 0.1, жмем кнопку "Установить выбранное", и следом - "Сохранить и перезапустить IDE", Лазарус пересоберется, и перезагрузится.
2. В меню Сервис после установки LazActiveX добавился пункт "Импортировать библиотеку типов". Импортируешь C:\WINDOWS\system32\shdocvw.dll, будет создан TLB-файл, просто добавляешь его в Uses...
3. Кладешь на форму кнопку, Edit, Memo и TActiveXContainer с закладки ActiveX. И, скажем, вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, activexcontainer, Forms, Controls, Graphics,
  Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ActiveXContainer1: TActiveXContainer;
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { private declarations }
    procedure MyBeforeNavigate2(Sender: TObject; pDisp:IDispatch;
      var URL:OleVariant; var Flags:OleVariant; var TargetFrameName:OleVariant;
      var PostData:OleVariant; var Headers:OleVariant; var Cancel:WordBool);
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses SHDocVw_1_1_TLB;
 
var
  WB : TEvsWebBrowser;
 
{$R *.lfm}
 
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
  url, zero : OleVariant;
begin
  url := UTF8Decode(Edit1.Text);
  zero := Null;
  WB.ComServer.Navigate2(url, zero, zero, zero, zero);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  WB := TEvsWebBrowser.Create(Self);
  ActiveXContainer1.ComServer := WB.ComServer;
  ActiveXContainer1.Active := True;
  WB.OnBeforeNavigate2 := @MyBeforeNavigate2;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  WB.Free;
end;
 
procedure TForm1.MyBeforeNavigate2(Sender: TObject; pDisp: IDispatch;
  var URL: OleVariant; var Flags: OleVariant; var TargetFrameName: OleVariant;
  var PostData: OleVariant; var Headers: OleVariant; var Cancel: WordBool);
begin
  Memo1.Lines.Add(UTF8Encode(URL));
end;
 
end.
В результате имеешь на форме WebBrowser с реакцией на попытку перейти по новому адресу:

Отслеживание переходов в браузере (стороннем или компоненте)


А что уж там в обработчике OnBeforeNavigate2 делать - это только от твоей фантазии зависит
1
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
03.06.2014, 17:01  [ТС] 7
UI,
когда пробую с http://google.ru/, все работает, но вот если пробую http://adf.ly/dtBfP (что мне как раз и нужно), получаю ошибки
Код
RunError(217)
Код
Проект project1 вызвал класс исключения 'EControlC' с сообщением: Control-C hit.
Код
Control-C hit
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31152 / 20360 / 7929
Регистрация: 22.10.2011
Сообщений: 35,292
Записей в блоге: 6
03.06.2014, 19:16 8
Не воспроизводится. Да, выбрасывает окно ошибки скрипта, но после нажатия на "Yes" (в смысле, продолжать выполнение скриптов на странице) продолжает работать как положено... Насколько я помню, окно ошибки скриптов тоже как-то убиралось. Что-то связанное с Silent...
0
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
11.06.2014, 13:32  [ТС] 9
Так и не разобрался, как довести до ума работу скриптов при использовании этого способа. В результате использовал GeckoPort.

Инструкции по установке и применению:
http://lazplanet.blogspot.com/... o-pt1.html
http://lazplanet.blogspot.com/... o-pt2.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2014, 13:32

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Посоветуйте пожалуйста! Как мне в компоненте ComboBox2 Организовать смену шрифтов в компоненте Memo1?
Всем заранее спасибо!!!!!!! void __fastcall TForm1::ComboBox2Change(TObject *Sender) { }

Как разместить кнопку на компоненте Tedit или Tcombobox?
как разместить кнопку на компоненте Tedit или Tcombobox

Как убрать рамку в компоненте WebBrowser или изменить ее цвет?
Доброго времени суток Интересует как убрать рамку в компоненте WebBrowser или изменить ее цвет в...

Создание куба и его вращение в компоненте Image или Shape
Кто нить может подсказать как связать грани куба так чтобы его можно было вращать по вертикали и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.