2014-04-22 2 views
3

JS를 실행하여 DOM에 값을 생성하는 것 외에는 Internet Explorer 개체에서 localstorage 변수에보다 쉽게 ​​직접 액세스 할 수 있습니까?VBA : InternetExplorer 개체에서 LocalStorage에 액세스

임시 텍스트 필드를 사용하는 사용자 지정 솔루션이 있지만 MS가 직접 기능을 제공하는지 궁금합니다.

Function retrieveLocalStorageValue(sURL As String, sLocalStorageVarName As String) As String 

    On Error GoTo ErrHandler1: 

     Dim javascriptString As String 
     Set oBrowser = New InternetExplorer 
     oBrowser.Silent = True 
     oBrowser.navigate sURL 
     oBrowser.Visible = True 

     Do 
     ' Wait till the Browser is loaded 
     Loop Until oBrowser.readyState = READYSTATE_COMPLETE 

    On Error GoTo ErrHandlerJscript: 

     javastringUrl = "document.body.innerHTML += '<input id=\""test1234\"" type=\""text\"" value=\""'+ localStorage.getItem('" & sLocalStorageVarName & "') +'\""\>';" 
     'Execute javascript to create hidden field - Use double quotes in VBA to escape 

     'Wait in case it is needed 
     Application.Wait DateAdd("s", 1, Now) 

     oBrowser.document.parentWindow.eval javastringUrl 
     retrieveLocalStorageValue = oBrowser.document.getElementById("test1234").getAttribute("value") 

    Exit Function 

ErrHandler1: 
    MsgBox ("Error, debugging required") 
    retrieveLocalStorageValue = "error" 

ErrHandlerJscript: 
    MsgBox ("Error with javascript execution, debugging required") 
    retrieveLocalStorageValue = "error" 
End Function 


Sub test() 
    Dim test As String 
    test = retrieveLocalStorageValue("http://127.0.0.1/stackexchange/localStorageVBA.html", "testObject") 
    MsgBox test 
End Sub 

참조 : 정말 http://maythesource.com/2014/04/22/vba-read-localstorage-variable-from-internet-explorer-object-using-temporary-textfield/

답변

1

없음 없습니다. 예. Microsoft Internet Explorer에 대한 참조 및 Microsoft HTML Object Library에 대한 참조를 설정할 수 있습니다. 이렇게하면 DOM 객체 모델에 직접 액세스 할 수 있으며 IntelliSense가 작동합니다. 그러나 실제로 속성에 액세스하려고하면 오류가 발생합니다. (아래에 설명 된대로 :)

Option Explicit 

Sub Example() 
    ThisFails "http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_webstorage_local", "lastname" 
End Sub 

Function ThisFails(ByVal sURL As String, ByVal sLocalStorageVarName As String) As String 
    Dim oBrowser As SHDocVw.InternetExplorer 
    Dim hDoc As MSHTML.HTMLDocument 
    Dim hWin As MSHTML.HTMLWindow2 
    Set oBrowser = New SHDocVw.InternetExplorer 
    oBrowser.Silent = True 
    oBrowser.Navigate sURL 
    oBrowser.Visible = True 

    Do 
     ' Wait till the Browser is loaded 
    Loop Until oBrowser.ReadyState = READYSTATE_COMPLETE 
    Do 
     Set hDoc = oBrowser.Document 
     'Trust me on these loops 
    Loop While hDoc Is Nothing 
    Do 
     Set hWin = hDoc.parentWindow 
    Loop While hWin Is Nothing 

    ThisFails = hWin.localStorage.getItem(sLocalStorageVarName) 


End Function