2014-04-22 34 views
3

是否有更容易/直接的方式從Internet Explorer對象訪問本地存儲變量,除了執行JS以在DOM上創建值?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對象庫的引用。這將允許您直接訪問DOM對象模型,並且智能感知將起作用。但是如果你真的試圖訪問屬性,它會拋出一個錯誤。 (如下所示:)

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