查看本地文件时,在 MS Access WebBrowser Control 中禁用 Javascript

Mik*_*hey 5 ms-access vba google-maps

我以前看过类似的帖子,但我在网上看到的所有解决方案似乎都不适合我。

我正在尝试使用 WebBrowser 控件来显示使用 Google Maps JavaScript API 的本地保存的 HTML 文件,但 JavaScript 仍然顽固地禁用。

为了测试这个问题,我使用基于https://developers.google.com/maps/documentation/javascript/examples/map-simple 的谷歌地图制作了一个简单的页面。我还添加了一个按钮来直接测试 JavaScript 是否正常运行

c:\map-test.html 在 Firefox 和 IE 中都能完美运行。

<!DOCTYPE html>
<html>
<head>
    <title>Google Maps JavaScript API v3 Example: Map Simple</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
        html, body, #map_canvas {
           margin: 0;
           padding: 0;
           height: 100%;
        }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
      var map;
      function initialize() {
        var mapOptions = {
          zoom: 8,
          center: new google.maps.LatLng(-34.397, 150.644),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map_canvas'),
        mapOptions);
      }
      google.maps.event.addDomListener(window, 'load', initialize);
   </script>
</head> 
<body>
    <input type="button" onclick="alert('JavaScript Functioning');" value="Test JavaScript">
<div id="map_canvas"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个带有名为 cWebBrowser 的 WebBrowser 控件的 MS Access 表单,并添加了一个方法来加载 c:\map-test.html。谷歌地图界面无法加载,测试按钮已死。

Private Sub Form_Current()
     Me.cWebBrowser.ControlSource = "=(""file:///C:/map-test.html"")"  
End Sub
Run Code Online (Sandbox Code Playgroud)

接下来,我尝试了map-simple的在线版本。JavaScript 按预期工作并加载了 Google Map 界面

Private Sub Form_Current()
     Me.cWebBrowser.ControlSource = "=(""https://google-developers.appspot.com/maps/documentation/javascript/examples/map-simple"")"
End Sub
Run Code Online (Sandbox Code Playgroud)

我一直试图解决这个问题很长一段时间没有成功。

在这篇文章http://support.microsoft.com/?kbid=315933 之后,我在 IE 安全设​​置中启用了我的电脑区域

在所有区域中,我启用了以下功能:

  • 允许编写 Microsoft Web 浏览器控件的脚本
  • 活动脚本

在高级选项卡下,我启用了以下内容:

  • 允许 CD 中的活动内容在我的电脑上运行
  • 允许活动内容在我的电脑上的文件中运行

有人建议在我的页面中添加 Web 标记,但这也无济于事。

我试过清除缓存。

我尝试更改文件名,以防清除后缓存仍然存在。

map-test.html 在 IE 和 WebBrowser Control 中下载时都可以工作,但只能在本地使用 IE 工作。除了安全设置之外,还有什么可能导致问题?是否有我遗漏的安全设置?是否还有其他测试可以诊断问题?

我在我的智慧尽头。

环境:
Windows 7 64bit
Access 2010
IE 9

聚苯乙烯

问题继续变得更奇怪

今天,我尝试创建一个非常简单的 JavaScript 页面,以确保它不是导致问题的 Google 地图代码。

<!DOCTYPE html>
<html>
    <body>
        <input type="button" onclick="alert('JavaScript Functioning');" value="Test JavaScript">
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

起初它奏效了,我很高兴。接下来,我尝试了谷歌地图测试页面,它也奏效了!所以,我尝试了我的全功能地图(在 IE 和 Firefox 中工作),它从我的数据库应用程序加载 JSON 输出,但它全部着火了,谷歌地图代码在内部导致了许多错误(不幸的是,我没有记录这些错误) .

现在,我回到了第一广场;所有页面都不允许编写脚本,包括上面的 5 行?!?!

Ren*_*uis 2

首先,查看增强保护模式和本地文件以及了解本地计算机区域锁定

什么在我的机器上有效

我已经使用完全相同的环境测试了不同的配置,并且它们都有效(请参阅下面的注意事项)。

  • 创建一个新表单,然后向其中添加一个网页浏览器控件:

  • 将其设置ControlSource为 URL 有效:

    在此输入图像描述

  • 下载 HTML 并将其保存到我的桌面,然后在ControlSource作品中引用本地文件:

    在此输入图像描述

  • ControlSource添加了一个按钮并在其OnClick事件中设置网络浏览器的 工作原理:

    Private Sub Command1_Click()
        WebBrowser0.ControlSource = "=""C:\Users\Renaud\Desktop\map-simple.htm"""
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述 在此输入图像描述

解决方案

从我上面提到的有关本地网页安全的文章的链接中,我尝试了一些操作:

  • 如果文件保存在用户的临时文件夹中,它将正确加载。
    尝试一下,输入%TEMP%资源管理器,它应该会带您进入C:\Users\username\AppData\Local\Temp或类似的内容。
    将 html 文件保存在那里并尝试从 Access 加载它,例如使用上面表单上的按钮:

    Private Sub Command1_Click()
       WebBrowser0.ControlSource = "=""C:\Users\Renaud\AppData\Local\Temp\map-simple.htm"""
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者,为了让 IE 允许您打开该文件,您需要降低其完整性级别,以便在 IE 打开该文件时强制该文件在 Internet 区域中运行(从而使其正常工作)。您可以通过打开命令提示符(以管理员身份)来检查文件的当前设置:

    ICACLS

    现在,我们可以设置文件完整性并再次检查设置:

    ICACLS

    现在您应该能够从 Access 和 IE 打开该文件。

    请注意,虽然当您将文件从 NTFS 系统移动到另一个 NTFS 系统时,ACL 会随文件一起移动,但如果您将它们复制到 USB 闪存驱动器或其他格式化为 FAT 的系统,它们可能会丢失,因此可能需要重新删除它们。 - 如果它们丢失,则应用于目标计算机。

  • 正如 Remou 提到的,我尝试将Web 标记添加到文件本身,但它对我不起作用,文件无法加载。
    这是我尝试过的:

    <!doctype html> 
    <!-- saved from url=(0014)about:internet -->
    <html>
      <head>
        <title>Google Maps JavaScript API v3 Example: Map Simple</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
        <meta charset="utf-8">
        ....    
    
    Run Code Online (Sandbox Code Playgroud)
  • 另一件可行的事情是尝试从本地 http 服务器(例如Mongoose)提供文件