Bonjour à tous

Avant tout je tiens à remercier PhilBen et littleakyo dont les posts à l'adresse cliquez ici m'ont permit d'appeler des fonctions JavaScript dans un fichier HTML en évitant le message d'accès dénié à l'appel de fonction JavaScript par du code VBA.

Sauf à me tromper car je ne suis pas un expert JavaScript, les fonctions chargées depuis un fichier JavaScript dans un objet ActiveX WebBrowse, ne sont pas accessibles en dehors du script mais pas les objets. Alors la solution (cf. post de littleakyo cliquez ici ) pour éviter le message d'accès dénié à l'appel de fonction JavaScript par du code VBA, est de créer un objet auquel on ajoute les méthodes (fonctions) nécessaires. (Partie à confirmer par des experts JavaScript)

Le mieux est encore un exemple qui complète celui de littleakyo basé sur celui de PhilBen

Un fihcier HTML avec du JavaScript et du JQuery qui, dans cet exemple, permet d'afficher des markers sur GOOGLE MAPS avec des infoWIndows à 2 onglets instanciés via JQuery avec intégration d'un streetView . Il apparait des erreurs de script mais non bloquant et cela fait l'objet du post suivant Cliquez ici
  • 1er onglet affiche des infos
  • 2ème onglet affiche un streetView


Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<!-- saved from url=(0016)http://localhost -->
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" style="overflow:hidden;">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Map</title>
 
<link href = "http://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css " rel = "stylesheet" type="text/css"/>
<script type="text/javascript" src = "http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript" src = "http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script language="javascript" src="https://maps.googleapis.com/maps/api/js?sensor=true&v=3.22"></script>
<script type="text/javascript" src="/utils.js"></script> 
 
 
<script type="text/javascript">
 
var arrMarkers = [{
                'locNr': "Location 1",
                'lat': 45.767299,
                'lon': 4.834329,
                'city': 'Lyon',
                'zip': 69,
                'land': "Fance",
                'info': '<b>Lyon<\/b><br>la suite du texte...'
        },
        {       'locNr': "Location 2",
                'lat': 48.856667,
                'lon': 2.350987,
                'city': 'Paris',
                'zip': 75,
                'land': "Fance",
                'info': '<b>Paris<\/b><br>la suite du texte...'
        },
        {       'locNr': "Location 3",
                'lat': 44.837368,
                'lon': -0.576144,
                'city': 'Bordeaux',
                'zip': 33,
                'land': "Fance",
                'info': '<b>Bordeaux<\/b><br>la suite du texte...'
        },
        {       'locNr': "Location 4",
                'lat': 43.297612,
                'lon': 5.381042,
                'city': 'Marseille',
                'zip': 13,
                'land': "Fance",
                'info': '<b>Marseille<\/b><br>la suite du texte...'
        }];
var oMap = {
        map: null,
        markers: []
};
 
oMap.init = function() 
{       if (document.getElementById)
        {       var mapDiv = document.getElementById('map');
                var latlng = new google.maps.LatLng(46.316584,2.98169);
                var options = 
                {       zoom: 6,
                        center: latlng,
                        mapTypeId: google.maps.MapTypeId.ROADMAP, // Existe d'autre format Ex: HYBRID => Plan sur photo
                        scalecontrol: true,
                        navigationControl: true,
                        maxZoom : 20,
                        navigationControlOptions:
                        {       style: google.maps.NavigationControlStyle.SMALL
                        },
                        mapTypeControlOptions:
                        {       style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
                        },
                        streetViewControl: true
                };      
    };
        oMap.map = new google.maps.Map(mapDiv, options);        
}
 
oMap.addMarker = function(){
        if (oMap.map){
                var latlng = new google.maps.LatLng(lat,lng);
                for (var i in arrMarkers) {
                        var lat = arrMarkers[i].lat;
                        var lng = arrMarkers[i].lon;
                        var locNr = arrMarkers[i].locNr;
                        var city = arrMarkers[i].city;
                        var zip = arrMarkers[i].zip;
                        var land = arrMarkers[i].land;
                        var info = arrMarkers[i].info;
                        var latlngset = new google.maps.LatLng(lat, lng);
                        var markOpt = {
                                map: oMap.map,
                                position: latlngset,
                                title: city
                        };
                        var marker = new google.maps.Marker(markOpt);
                        oMap.markers.push(marker);
                        
                        var contentInfoWindow = [
                                '<div id="InfoText">',
                                        '<div class ="tabs">',
                                                '<ul>',
                                                        '<li><a href="#tab1">General</a></li>',
                                                        '<li><a href="#tab2" id="SV">Street View</a></li>',
                                                '</ul>',
                                                '<div id="tab1">',
                                                        '<h3><b>' + locNr + '</h3></b>', '<p>' + city + '<BR>' + land + '<BR>' + zip + '<BR>' + info + '</p>',
                                                '</div>', 
                                                '<div id="tab2">', 
                                                        '<div id="pano"></div>',
                                                '</div>',
                                        '</div>',       
                                '</div>'                
                                ].join('');
                        var infoWindowOptions = {
                                content: contentInfoWindow,
                                position: latlngset
                        };
                        var infowindow = new google.maps.InfoWindow(infoWindowOptions);
                        setEventMarker(marker, infowindow);
                };
        };
}
function setEventMarker(marker, infowindow) {
    google.maps.event.addListener(marker, "click", function () {
        infowindow.open(this.getMap(), this);
    });
 
    google.maps.event.addListener(infowindow, 'domready', function () {
        $(".tabs").tabs();
        $('#SV').click(function () {
            var panoramaOptions = {
                                position: marker.position
                        };
                        var panorama = new google.maps.StreetViewPanorama(document.getElementById("pano"), panoramaOptions);
            oMap.map.setStreetView(panorama);
        });
    });
};
 
 
oMap.adjustViewPort = function() {
        if (oMap.map) {
                var bounds = new google.maps.LatLngBounds();
                for (var i in oMap.markers) {
                        bounds.extend(oMap.markers[i].getPosition());
                }
                oMap.map.fitBounds(bounds);
}}
 
</script>
<style>
body {
        height: 100%;
        margin: 0px; 
        padding: 0px; 
        overflow: hidden 
}
 
#map { height: 100% }
        
#infotext {
  font-size:12px;
  width:480px;
  height:380px;
}
.tabs {
  width:450px;
  height:350px;
}
#pano {
  width:350px;
  height: 250px;
}
 
#streetview_canvas {
  width:400px;
  height: 340px;
}
 
</style>
</head>
<body>
  <div id="Map"></div>
</body>
</html>



Dans MS-ACCESS
  • La forme 1 avec d'un bouton qui ouvre la deuxième forme
  • La forme 2 avec un objet ActiveX Internet WebBrowser nommé wbGeoLoc


Pour appeler une fonction du fichier, il faut utiliser ActiveXWebBrowserName.Document.parentWindow.execScript "Nom de fonction()", "type langage"

Pour illustrer voici le code VBA sous éventement de chargement de la forme 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Form_Load()
 
    Dim fileName As String, csScriptLanguage as String
 
    fileName = "\Geocoding_markersList.html"
    csScriptLanguage = "JavaScript"
 
    Me.wbGeoLoc.Navigate CurrentProject.Path & fileName
 
    Do While Me.wbGeoLoc.ReadyState <> acComplete: DoEvents: Loop
 
    sScript = "oMap.init()"
    Me.wbGeoLoc.Document.parentWindow.execScript sScript, csScriptLanguage
 
    sScript = "oMap.addMarker()"
    Me.wbGeoLoc.Document.parentWindow.execScript sScript, csScriptLanguage
 
    sScript = "oMap.adjustViewPort()"
    Me.wbGeoLoc.Document.parentWindow.execScript sScript, csScriptLanguage
 
End Sub
Et on obtient le résultat suivant:

Nom : Intenet_webBrowser1.jpg
Affichages : 486
Taille : 140,0 Ko
Nom : Intenet_webBrowser2.jpg
Affichages : 591
Taille : 147,7 Ko