пятница, 3 июня 2016 г.

Вызов Delphi процедуры из JavaScript TWebBrowser

Описано как вызвать процедуру Delphi из JavaScript кода загруженного в TWebBrowser

Пример вызова


В форме есть компонент TWebBrowser в нем подгружена страница страница index.html

<html> 
    <body>
        <a href="external.test()">Вызовы тестовой процедуры</a> 
    </body> 
</html>

Вот код реализующий, что бы при нажатии на ссылку в браузере, сработал procedure test

unit Unit1; 
interface 
    uses  Windows, Messages, SysUtils, Variants, Classes, 
            Graphics, Controls, Forms,  Dialogs, OleCtrls, SHDocVw, 
            MSHTML, StdCtrls, Buttons; 
    type 
        TForm1 = class(TForm) 
            internet: TWebBrowser; 
            BitBtn1: TBitBtn; 
            procedure FormCreate(Sender: TObject); 
            procedure BitBtn1Click(Sender: TObject); 
            procedure TForm1.internetBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
                                                     var URL, Flags, TargetFrameName, 
                                                     PostData, Headers: OleVariant; 
                                                     var Cancel: WordBool); 
        end; 
    
    var 
        Form1: TForm1; 
implementation 
{$R *.dfm} 
    procedure TForm1.FormCreate(Sender: TObject); 
    begin 
         // При создании формы переходим по ссылке 
        internet.Navigate('file://' + GetCurrentDir + '/html/index.html'); 
    end; 
    
    procedure test; 
    begin
        // Показываем сообщение 
        ShowMessage('123'); 
    end; 
    // Отлавливаем в browser переход по ссылке 
    procedure TForm1.internetBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
                                             var URL, Flags, TargetFrameName, 
                                             PostData, Headers: OleVariant; 
                                             var Cancel: WordBool); 
    var 
        S: String; 
    begin 
        // Получаем ссылку 
        S := URL; 
        // Сравниваем ссылку с условием 
        if ( S[1] = 'external.test()' ) then 
        begin 
            // Отменяем переход по ссылке 
            Cancel := True; 
            // Вызываем процедуру 
            test; 
        end 
    end;
end.

Ссылки по теме

https://toster.ru/q/141443 - Как вызвать процедуру Delphi из Javascript (external.test)?

2 комментария:

  1. procedure TForm1.internetBeforeNavigate2
    - в этой строчке он пишет что Undeclared identifier: 'TForm1' at line 10
    Шо ему надо?

    ОтветитьУдалить
    Ответы
    1. Нужно в Delphi создать проект VLC с формой и по умолчанию она имеет такое название, потом положить на нее компонеyт TWebBrowser

      Удалить