5

私は以前に同様の投稿を見たことがありますが、オンラインで見た解決策はどれも私にはうまくいかないようです。

WebBrowserコントロールを使用して、Google Maps JavaScript APIを使用するローカルに保存されたHTMLファイルを表示しようとしていますが、JavaScriptは頑固に無効のままです。

問題をテストするために、 https: //developers.google.com/maps/documentation/javascript/examples/map-simpleに基づいてGoogleマップを使用して簡単なページを作成しました。また、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は期待どおりに機能し、Googleマップインターフェイスが読み込まれました

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のセキュリティ設定でマイコンピュータゾーンを有効にしました

すべてのゾーンで、次を有効にしました。

  • MicrosoftWebブラウザコントロールのスクリプトを許可する
  • アクティブスクリプティング

[詳細設定]タブで、次を有効にしました。

  • CDのアクティブコンテンツをマイコンピュータで実行できるようにする
  • マイコンピュータ上のファイルでアクティブコンテンツを実行できるようにする

誰かが私のページにMarkofthe Webを追加することを提案しましたが、それも役に立ちませんでした。

キャッシュをクリアしてみました。

クリア後​​にキャッシュが残った場合に備えて、ファイル名を変更してみました。

map-test.htmlは、IEとWebBrowser Controlの両方でダウンロードした場合に機能しますが、IEを使用してローカルでのみ機能します。セキュリティ設定以外に問題を引き起こしている可能性があるものは何ですか?不足しているセキュリティ設定はありますか?問題を診断するために私ができる他のテストはありますか?

私は私の知恵の終わりにいます。

環境:
Windows764ビット
Access2010IE
9

PS

問題はさらに奇妙になり続けています

今日は、問題の原因がGoogleマップのコードではないことを確認するために、非常に単純なJavaScriptページを作成してみました。

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

最初はうまくいき、大喜びしました。次に、Googleマップのテストページを試してみましたが、それもうまくいきました。そこで、DBアプリケーションからJSON出力をロードするフル機能のマップ(IEとFirefoxで動作)を試しましたが、すべてが炎上し、Googleマップコードが内部で多数のエラーを引き起こしました(残念ながら、エラーを文書化しませんでした) 。

今、私は正方形の1つに戻っています。上記の5ライナーを含め、どのページもスクリプトを許可していませんか?!?!

4

3 に答える 3

2

私のマシンで何が機能するか

純粋に将来の読者のために。

追加のActiveXコントロールからではなく、ツールバーからWindows7とAccess2010およびWebブラウザーコントロールを使用する。OPのコード(下記)を使用し、Mark of the 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 に答える
2

まず、拡張保護モードとローカルファイル、およびローカルマシンゾーンのロックダウンについてを見てください。

私のマシンで何が機能するか

まったく同じ環境を使用してさまざまな構成をテストしましたが、すべて機能します(以下の警告を参照)。

  • 新しいフォームを作成し、それにWebブラウザコントロールを追加します。

  • ControlSourceURLが機能するように 設定します。

    ここに画像の説明を入力してください

  • HTMLをダウンロードしてデスクトップに保存し、ControlSource作品 内のローカルファイルを参照します。

    ここに画像の説明を入力してください

  • ボタンを追加し 、イベント動作ControlSource内にWebブラウザを設定します。OnClick

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

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

ソリューション

上記のローカルWebページのセキュリティに関する記事へのリンクから、いくつか試してみました。

  • ファイルがユーザーの一時フォルダーに保存されている場合、ファイルは正しくロードされます。
    それを試して、%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がファイルを開いたときにインターネットゾーンで強制的に実行されるようにする必要があります(したがって、ファイルが正しく機能します)。コマンドプロンプトを(管理者として)開くと、ファイルの現在の設定を確認できます。

    ICACLS

    これで、ファイルの整合性を設定し、設定を再度確認できます。

    ICACLS

    これで、AccessとIEからファイルを開くことができるはずです。

    ACLはNTFSシステムから別のNTFSシステムに移動するとファイルと一緒に移動しますが、たとえばUSBフラッシュドライブやFATとしてフォーマットされた別のシステムにコピーすると失われる可能性があるため、ACLを再作成する必要がある場合があります。 -それらが失われた場合、ターゲットマシンに適用されます。

  • Remouが述べたように、ファイル自体にMark Of The 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">
        ....    
    
  • 動作する必要があるもう1つのことは、Mongooseなどのローカルhttpサーバーからファイルを提供しようとすることです。

于 2012-11-12T10:56:31.063 に答える
0

私は、ローカルで生成されたコンテンツを使用して、AccessフォームでWebBrowserControlを何度も使用しました。

移植性のために、私は各コ​​ンピューターのセキュリティ設定を台無しにしたくありません。

私の解決策は、ローカルで実行されるものすべてに、Javascriptの代わりにVBAを使用することです。VBAベースのイベントハンドラーをドキュメント要素にアタッチすることもできます。(オブジェクトブラウザを使用してMSHTMLライブラリを探索します。)

これには、file://でロードされたファイルと、about:blankに移動し、WebBrowser.Document.Open/.Writeでコンテンツを書き込むことによって作成されたページの両方が含まれます。

Googleマップの場合、インターネットベースのiframeをホストするローカルドキュメントを作成できるはずです。セキュリティ面では、Javascriptはローカルドキュメントでは機能しませんが、iframeでは機能するはずです。

...トムロビンソン

于 2014-10-06T17:49:31.607 に答える