2010-11-17 212 views
2

嗨,我试图自动化组合框选择,然后屏幕刮擦结果。但是我在触发Combo Box Change事件时遇到了一个问题,在更改选择时不会调用它。 onchange事件被设置为一个JavaScript函数:事情是这样的:Delphi Web Automation如何将此变量传递给JavaScript函数

"AFunction(this,'combochange.asp?AVariable=true&')" 

我试图使用HTMLWindow.execScript函数来调用JavaScript函数(机能缺失)。该函数直接使用“this”

问题:我将组合框引用为IHTMLSelectElement。如何在HTMLWindow.execScript调用中将“this”变量的引用传递给组合框?

目前代码:

procedure TFormMain.CallComboChange(Doc: IHTMLDocument2; SelectCombo: IHTMLSelectElement); 
var 
    HTMLWindow: IHTMLWindow2; // parent window of current HTML document 
    JSFn: string;    
begin 
    HTMLWindow := Doc.parentWindow; 
    if not Assigned(HTMLWindow) then 
    Exit; 
    try 
    JSFn := 'AFunction(id_Combo, combochange.asp?AVariable=true&)'; 
    HTMLWindow.execScript(JSFn, 'JavaScript'); // execute function 
    except 
    ShowMessage('Opps exception in javascript call'); 
    end; 
end; 

我也曾尝试SelectCombo.OnChange但不做任何事要么:(

感谢

PS这不是黑客,是简单地自动执行。耗时的重复任务,然后我想将结果提供给另一个站点(我已经全部正常工作)

[编辑] 一个相关的问题(这可能有助于回答原来的问题) - JavaScript是一种解释型语言,所以...当我称这个函数为函数行时,解释了这一点?肯定是的,是的?如果是这样,我想我只需要去“根”。例如:

函数(this.form.elements [“elementname”],“parameters”)。

我不知道太多的JavaScript,所以思考/语法沿着正确的线?

回答

0

答案是:

JSFn := 'AFunction(this.form2.elements["id_Combo"], ''combochange.asp?AVariable=true&'')'; 

的线索是“解释”所以你只要出示它,你会写一行JavaScript源。

:)

相关问题