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


Автор: bllem 23.7.2008, 00:22
Есть страничка с несколькими функциями. Задача - заменить тело одной из функций.
есть
Код

((pDisp as iwebbrowser).Document as IHTMLDocument2)

Куда отсюда плясать? Название функции известно.

Автор: SneG0K 23.7.2008, 05:47
А ты попробуй получать тело IdHTTP.GET(), сохранять в поток, модифицировать и уже модифицированным отдавать из потока на сьедение компоненты

Автор: bllem 23.7.2008, 09:09
мне так нельзя делать. Нужно именно по факту завершения загрузки заменить тело функции.

Автор: bllem 23.7.2008, 16:15
никто не имел дело? Горит капец.

Автор: Or1angur 27.2.2009, 01:30
Чем не устраивает замена тела средствами самого JavaScript?

Автор: Rrader 27.2.2009, 18:18
page.htm
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>Page</title>
<script language="Javascript">

function MyClick()
{
  alert("Normal");
}
</script>

</head>
<body>

<table border="1" style="background-color: Silver" onclick="MyClick()">
<tr>
<td>Some Text</td>
</tr>
</table>

</body>
</html>

Button1 - загружает страницу. Button2 - патчит JavaScript сценарий в страничке.
Код

unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, OleCtrls, SHDocVw, ActiveX;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Patch = 'function MyClick()' + sLineBreak +
    '{' + sLineBreak + '  alert("Patched");' + sLineBreak + '}';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('file://' + ExtractFilePath(ParamStr(0)) + 'page.htm');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Script: OleVariant;
begin
  with WebBrowser1 do
  begin
    Script := OleVariant(Document).scripts.item(0);
    Script.text := Patch;
    Script := Unassigned;
  end;
end;

end.

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