如何使用带Autohotkey的COM访问Javascript数组

时间:2015-01-31 00:16:41

标签: javascript autohotkey

我一直在使用Autohotkey访问网页上的一些元素,我可以使用:wb.document.elements [x] .forms [x] .value并将其分配给一个值。我很抱歉,但我对Javascript的了解非常有限。

最近我查看了该页面的代码并注意到以下内容:

<script type="text/javascript" defer="defer"> 
form = new ActiveForm('EditingServiceInformationforSOMEGUY','Editing Service Information for SOME GUY');
    data = {};
    data.header = ["addressid", "contactid", "address1", "address2", "city", "state", "zip"];
    data.body = [["275101010", "254101010", "1001 Maudlin", "Apt. 1774", "Beverly Hills", "CA", "90210"]];

我尝试通过AHK访问data.body部分失败了。如果我在查看页面时输入地址栏:

javascript: alert(data.body[0])

我收到一个消息框,其中data.body值以逗号分隔。

我似乎无法通过Autohotkey复制此内容。我尝试了很多不同的语法,但我在这里遗漏了一些东西。我想得到一个与我在Javascript Alert中看到的值相同的msgbox,然后从那里进一步操作它们。

我在我的脚本中尝试了很多不同的组合来显示data.body作为逗号分隔变量的列表,但似乎无法正确触发它。

我目前的AHK代码如下,尝试分配tempvar的行是我无法正确的行。

Settitlematchmode, 2
WinGetTitle, Webstring, Title of the page
wb := IEGet(Webstring)

    tempvar := wb.document(data.header[0])
    msgbox % tempvar . "|" . Isobject(tempvar)
    IEGet(Name:="") {
        IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame
            Name := ( Name="New Tab - Windows Internet Explorer" ) ? "about:Tabs"
            : RegExReplace( Name, " - (Windows|Microsoft) Internet Explorer" )
        For wb in ComObjCreate( "Shell.Application" ).Windows
            If ( wb.LocationName = Name ) && InStr( wb.FullName, "iexplore.exe" )
                Return wb
    }

1 个答案:

答案 0 :(得分:0)

@ vasili111处在正确的轨道上。试试这个:

Settitlematchmode, 2
WinGetTitle, Webstring, Title of the page
wb := IEGet(Webstring)

IID := "{332C4427-26CB-11D0-B483-00C04FD90119}" ; IID_IHTMLWindow2
window := ComObj(9,ComObjQuery(wb,IID,IID),1)

    tempvar := window.data.header.0
    ; or use
    ;tempvar := window.eval("data.header[0]")

    msgbox % tempvar . "|" . Isobject(tempvar)
    IEGet(Name:="") {
        IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame
            Name := ( Name="New Tab - Windows Internet Explorer" ) ? "about:Tabs"
            : RegExReplace( Name, " - (Windows|Microsoft) Internet Explorer" )
        For wb in ComObjCreate( "Shell.Application" ).Windows
            If ( wb.LocationName = Name ) && InStr( wb.FullName, "iexplore.exe" )
                Return wb
    }