Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > execScript в Mozilla ActiveX


Автор: Hooch 6.3.2006, 22:42
Скажите-ка, можно ли для Mozilla ActiveX вызвать функцию execScript, как это возможно для IE?

К примеру, я имею HTML-документ, загруженный в TMozillaBrowser. В HTML-документе сидит функция JavaScript, которую я хочу программно вызвать.

В случае IE это выглядело бы как

(WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript('функция_java', 'jscript');

(если ничего не напутал smile) Воот, а Mozilla на parentWindow ругается.
Заранее спасибо.

Автор: December 7.3.2006, 15:54
Попробуй
WebBrowser1.ControlInterface.execScript('code', 'javascript');

Автор: Hooch 8.3.2006, 07:29
У ControlInterface нет метода execScript smile

Автор: Asterix777 6.8.2009, 23:02
подскажи как установил Mozilla ActiveX?

Автор: Asterix777 7.8.2009, 07:42
Большое спасибо smile  smile  smile 

А подскажите где взять для Opera ActiveX?

Автор: shtorkin 9.8.2009, 21:55
Случайно набрел на топик. Сам искал эту альтернативу, и решение оказалось банальным:

Код

FGecko.Navigate('javascript:your_function();');


Корявый вызов Js-функций внутри HTML оказался отличным решением для программного их вызова.
Кстати, совсем не обязательно устанавливать этот контрол из предлагаемого Exe-шника, более того, там старье. Достаточно скачать свежий Gecko с бинарниками внутри, залить все бинарники в папку проекта, а потом зарегить компонент mozctrl.dll ("regsvr32.exe mozctrl.dll") и все, ваше приложение будет работать, но эту операцию придется выполнять на этапе "установки" вашего детища, в случае его "деинсталяции" надо сделать ("regsvr32.exe /u mozctrl.dll"). Для приложения понадобится тайплиб, приаттаченный к сообщению (тайплиб сформирован при установке ActiveX компонента и может смело использоваться). 

Пример использования:

Код

unit f_GeckoTest;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, comobj, mozbwsr, ExtCtrls, ComCtrls;

type
  TfGeckoTest = class(TForm)
    txtURL: TEdit;
    btnGo: TButton;
    staMain: TStatusBar;
    pnlGeckoContainer: TPanel;
    procedure btnGoClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FGecko : TMozillaBrowser;
    procedure GeckoNav(sURL: string);
    function  CreateGeckoObject: boolean;
    procedure DoStatusChange(Sender: TObject; const Text: WideString);
  public

  end;

var
  fGeckoTest: TfGeckoTest;

implementation

{$R *.DFM}

procedure TfGeckoTest.FormDestroy(Sender: TObject);
begin
     if Assigned(FGecko) then FGecko.Free;
end;

procedure TfGeckoTest.btnGoClick(Sender: TObject);
begin
     GeckoNav(txtURL.Text);
end;

procedure TfGeckoTest.GeckoNav(sURL: string);
var
   Flags, TargetFrameName, PostData, Headers : OleVariant;
begin
     if not CreateGeckoObject then exit;
     FGecko.Navigate(sURL, Flags, TargetFrameName, PostData, Headers);
end;

function TfGeckoTest.CreateGeckoObject: boolean;
begin
     if Assigned(FGecko) then
     begin
          Result := True;
          exit;
     end;

     Result := False;

     screen.Cursor := crHourglass;
     try
         try
            FGecko := TMozillaBrowser.Create(self);
            with FGecko do
            begin
                 ParentWindow := pnlGeckoContainer.Handle;
                 SetBounds(1, 1, pnlGeckoContainer.Width-1, pnlGeckoContainer.Height-1);
                 OnStatusTextChange := DoStatusChange;
            end;

            Result := True;
         except
             on EOleError do
             begin
                  MessageDlg('Unable to create Gecko object.', mtError, [mbOK], 0);
             end;
         end;
     finally
        screen.Cursor := crDefault;
     end;
end;

procedure TfGeckoTest.DoStatusChange(Sender: TObject; const Text: WideString);
begin
     staMain.SimpleText := Text;
end;


end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)