使用MS Access中的Webbrowser Control克服域访问问题

时间:2016-08-18 16:02:31

标签: javascript access-vba ms-access-2010 webbrowser-control

我在MS Access 2010中开发了一个数据库应用程序,它有一个嵌入式WebBrowser控件,用于查看本地网页。该页面使用Google Maps API提供一些独特的地图功能,我使用网络浏览器控件访问网页中的javascript,以便在数据库和呈现它的网页之间传递地图数据。

但是,我一直在遇到“Access is Denied”跨域错误,我无法解决。我记得以前解决了这个问题,它涉及添加“Web of Mark”评论并确保适当的IE兼容模式 - 我已经完成了这两种模式。

HTML文件是本地加载的,它包含一个separte文件夹(也是本地文件夹)中的一系列javascript文件。 javascript文件使用google maps API在Web浏览器控件中填充地图

无论如何,请参阅下面的webbrowser控件直接在MS Access中加载的index.html文件。整体上有很多代码,所以在我更好地了解我应该寻找的内容之前,我不想发送垃圾邮件。

顺便说一下,我在VBA中使用HTMLWindowProxy对象来直接调用网页中嵌入的加载的javascript函数。

具体来说,从VBA内部,我打电话给:

Call proxyWindow.execScript mScriptName

Call proxyWindow.Navigate mScriptName

这是产生错误的调用。

<!DOCTYPE html>
<!-- saved from url=(0014)about:internet -->
<html>
  <head>
    <meta http-equiv=”X-UA-Compatible” content=”IE=edge”><meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }

      .gm-style-iw {
        min-width: 150px; 
      }      
    </style>
  </head>
  <body>
    <div id="pathData">
      <input type="hidden" id="docReadyState" value="unset">
      <input type="hidden" id="default_position" 
             data-lat=41.843435 data-lng=-89.481619>

      <input type="hidden" id="location_address" value="">
    </div>
    <div id="map-canvas"></div>

    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3&libraries=geometry&key=REDACTED"></script>

    <script src="js/html.js"></script>
    <script src="js/BindableBase.js"></script>
    <script src="js/mvcarraybinder.js"></script>
    <script src="js/ButtonControl.js"></script>
    <script src="js/ElementOptions.js"></script>
    <script src="js/SectionMarker.js"></script>
    <script src="js/SectionPolyline.js"></script>    
    <script src="js/SectionMap.js"></script>
    <script src="js/main.js"></script>

    <script>
        document.onreadystatechange = function () {
            if (document.readyState === "complete") {
                document.getElementById ("docReadyState").value = "ready";}
            else {
                document.getElementById("docReadyState").value = "busy";}
        }
    </script>
</body>

0 个答案:

没有答案