2013-01-24 13 views
5

मैं Google मानचित्र प्रस्तुत करने के लिए अपने wpf एप्लिकेशन में "वेबलिस्टर" का उपयोग कर रहा हूं। तो मैं पैन (एक्स, वाई) जावास्क्रिप्ट विधि को कुछ पैरामीटर के साथ कॉल कर रहा हूं जो मेरा सी # कोड बनाता है।WPF - जावास्क्रिप्ट फ़ंक्शन को कॉल करते समय त्रुटि - अज्ञात नाम। (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> 
<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

आप लोड होने से पहले 'पैन' फ़ंक्शन को कॉल कर सकते हैं। इस क्यू पर एक नज़र डालें: http://stackoverflow.com/questions/12641771/webbrowser-invokescript – Sam

+0

मैंने पोस्ट पढ़ लिया है, उन्होंने लोडकंपलेटेड ईवेंट हैंडलर को लागू करने के लिए कहा और फिर अपनी स्क्रिप्ट का आह्वान किया। क्या आप मुझे कुछ विचार दे सकते हैं, wpf में LoadCompleted ईवेंट हैंडलर को कैसे कार्यान्वित करें। – Mahesh

+0

मुझे लगता है कि जब आप VS में डिज़ाइन टैब पर अपने वेब ब्राउजर पर क्लिक करते हैं तो ईवेंट टैब को देखना सबसे आसान तरीका है। – Sam

उत्तर

2

हां, मुझे समस्या मिली। मैं HTML पृष्ठ लोड किए बिना जावास्क्रिप्ट फ़ंक्शन को कॉल करने का प्रयास करता हूं। तो मैंने पहले एचटीएमएल पेज लोड किया है और फिर जावास्क्रिप्ट फ़ंक्शन कहा है और यह मेरे लिए काम कर रहा है।

तो मैं नीचे के रूप में मेरी कोड बदल दिया है और यह ठीक काम कर रहा है: -

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

यह जावास्क्रिप्ट लोड घटना दस्तावेज़ को आह्वान स्थानांतरित करने के लिए बेहतर है।

संबंधित मुद्दे