2013-01-24 9 views
5

Sto usando "WebBroswer" nella mia applicazione wpf per eseguire il rendering di Google map. Quindi sto chiamando il metodo Pan (x, y) JavaScript con alcuni parametri del mio codice C#.WPF - Errore durante la chiamata alla funzione javascript - Nome sconosciuto. (Eccezione da HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))

Ma sto ottenendo questo sotto l'errore.

Nome sconosciuto. (Eccezione da HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME)) File

mio Window2.xaml:

File
<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> 

mio 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); 
     } 
    } 
} 

La mia pagina 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

Si può chiamare la funzione 'Pan' prima che venga caricata. Date un'occhiata a questo: http://stackoverflow.com/questions/12641771/webbrowser-invokescript – Sam

+0

Ho letto il post, hanno detto di implementare il gestore di eventi LoadCompleted e quindi di invocare il vostro script. Puoi darmi qualche idea su come implementare il gestore di eventi LoadCompleted in wpf. – Mahesh

+0

Penso che il modo più semplice sia cercare la scheda degli eventi quando si fa clic sul WebBrowser nella scheda di progettazione in VS. – Sam

risposta

2

Sì, ho avuto il problema. Provo a chiamare la funzione JavaScript senza caricare la pagina HTML. Quindi ho prima caricato la pagina html e poi ho chiamato la funzione JavaScript e sta funzionando per me.

così ho cambiato il mio codice come qui sotto e si sta lavorando bene: -

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

E 'meglio spostare il JavaScript invocare a Documento evento caricato.