5

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

我正在尝试使用 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>

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

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

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

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

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

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

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

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

在高级选项卡下,我启用了以下功能:

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

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

我试过清除缓存。

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

map-test.html 在 IE 和 WebBrowser 控件中下载时都可以工作,但只能在本地使用 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>

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

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

4

3 回答 3

2

首先,看看增强保护模式和本地文件了解本地机器区域锁定

什么在我的机器上工作

我已经使用您完全相同的环境测试了不同的配置,并且它们都可以正常工作(请参阅下面的警告)。

  • 创建一个新表单,然后向其中添加一个 webbrowser 控件:

  • 将其设置ControlSource为 URL 作品:

    在此处输入图像描述

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

    在此处输入图像描述

  • ControlSource添加了一个按钮并在其OnClick事件中设置 Webbrowser :

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

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

解决方案

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

  • 如果文件保存在用户的临时文件夹中,它将正确加载。
    试试看,输入%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
    
  • 或者,为了让 IE 允许您打开文件,您需要降低其完整性级别,以便在 IE 打开它时强制它在 Internet 区域中运行(从而使其正常工作)。您可以通过打开命令提示符(以管理员身份)检查文件的当前设置:

    ICACLS

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

    ICACLS

    现在您应该可以从 Access 和 IE 打开文件了。

    请注意,当您将 ACL 从 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">
        ....    
    
  • 应该起作用的另一件事是尝试从本地 http 服务器提供文件,例如Mongoose

于 2012-11-12T10:56:31.063 回答
2

什么在我的机器上工作

纯粹是为了未来的读者。

使用 Windows 7 和 Access 2010 以及工具栏中的 Webbrowser 控件,而不是其他 ActiveX 控件;使用 OP 中的代码(如下)并添加Web 标记(MOTW);使用保存到桌面的 *.html 文档;将 webbrowser 控制源设置为="C:\Users\<user>\Desktop\java.htm".

<!DOCTYPE html>
<!-- saved from url=(0023)http://www.contoso.com/ -->
<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>
于 2012-11-13T12:11:41.117 回答
0

我在 Access 表单上多次使用 WebBrowser 控件,其中包含本地生成的内容。

为了便携性,我不想弄乱每台计算机上的安全设置。

我的解决方案是使用 VBA 而不是 Javascript,用于本地运行的任何内容。您甚至可以将基于 VBA 的事件处理程序附加到文档元素。(使用对象浏览器探索 MSHTML 库。)

这包括使用 file:// 加载的文件以及通过导航到 about:blank 然后使用 WebBrowser.Document.Open / .Write 写入内容而构建的页面上的文件。

对于 Google 地图,您应该能够构建托管基于 Internet 的 iframe 的本地文档。安全方面,Javascript 不能在本地文档中工作,但它应该在 iframe 中工作。

...汤姆·罗宾逊

于 2014-10-06T17:49:31.607 回答