2013-01-24 9 views
5

私はwpfアプリケーションで "WebBroswer"を使用してGoogleマップをレンダリングしています。だから、いくつかのパラメータを使ってPan(x、y)JavaScriptメソッドを呼び出すことになりました。WPF - javascript関数の呼び出し中にエラー - 不明な名前。 (HRESULTからの例外:0x80020006(DISP_E_UNKNOWNNAME))

しかし、これは以下のエラーが発生しています。

不明な名前。 (HRESULTからの例外:0x80020006(DISP_E_UNKNOWNNAME))

マイWindow2.xamlファイル:

<Window x:Class="Test.Window2" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window2" Height="300" Width="300"> 
    <Grid> 
     <WebBrowser Name="mapBrowser" Margin="50" /> 
     <Button Name="button1" VerticalAlignment="Bottom" Click="button1_Click">Button</Button> 
    </Grid> 
</Window> 

マイWindow2.xaml.csファイル:

namespace Test 
{ 
    /// <summary> 
    /// Interaction logic for Window2.xaml 
    /// </summary> 
    public partial class Window2 : Window 
    { 
     public Window2() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      Uri uri = new Uri(@"pack://application:,,,/HTMLPage1.htm"); 
      Stream source = Application.GetContentStream(uri).Stream; 
      mapBrowser.NavigateToStream(source); 
      this.mapBrowser.InvokeScript("Pan", x, y); 
     } 
    } 
} 

マイHTMLページ:

<html> 
<head> 
    <title></title> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 

    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 

    <script type="text/javascript"> 
     var map; 
     var latlng; 
     var lat; 
     var lng; 
     var zoom; 

     function Init() { 
      lat = 40.632915; 
      lng = -8.68929; 
      zoom = 18 
      latlng = new google.maps.LatLng(lat, lng); 
      var options = { 
       zoom: 18, 
       center: latlng, 
       mapTypeId: google.maps.MapTypeId.SATELLITE 
      }; 

      map = new google.maps.Map(document.getElementById("map_canvas"), options); 
     } 

     function Pan(x, y) { 
      try { 
       lat = x; 
       lng = y; 

       map.panTo(new google.maps.LatLng(lat, lng)); 
      } 
      catch (ex) { 
       window.alert("Pan:Error"); 
      } 
     } 
    </script> 

</head> 
<body onload="Init()"> 
    <div id="map_canvas" style="width: 100%; height: 100%"> 
    </div> 
</body> 
</html> 
+0

'Pan'関数が呼び出される前に呼び出すかもしれません。このQを見てください:http://stackoverflow.com/questions/12641771/webbrowser-invokescript – Sam

+0

私は記事を読んで、彼らはLoadCompletedイベントハンドラを実装して、あなたのスクリプトを呼び出すと言いました。私には、wpfでLoadCompletedイベントハンドラを実装する方法をいくつか考えていただけますか? – Mahesh

+0

VSのデザインタブでWebBrowserをクリックすると、イベントタブを探すのが最も簡単な方法だと思います。 – Sam

答えて

2

はい、問題があります。 HTMLページをロードせずにJavaScript関数を呼び出そうとしています。だから私は最初にHTMLページを読み込んだ後、JavaScript関数とそれを働かせてくれました。

だから私は以下のように自分のコードを変更して、それが正常に動作している: -

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      Uri uri = new Uri(@"pack://application:,,,/HTMLPage1.htm"); 
      Stream source = Application.GetContentStream(uri).Stream; 
      mapBrowser.NavigateToStream(source); 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      try 
      { 
       this.mapBrowser.InvokeScript("Pan", 19.006145, 72.818148); 
      } 
      catch 
      { 
      } 
     } 
    } 
} 
1

それは、JavaScriptがロードされたイベントを文書化するために呼び出す移動する方が良いでしょう。

関連する問題