簡體   English   中英

C#WPF WebBrowser-如何將數組傳遞給javascript函數

[英]C# WPF WebBrowser - how to pass an array to a javascript function

我正在嘗試向Google地圖添加多個標記。 數據來自C#WPF。

這是C#代碼:

private void Button_click(object sender, RoutedEventArgs e)
{
    int[] lat = { 10, 30, 50, 70 };
    int[] lon = { 10, 30, 50, 70 };

    webBrowser1.InvokeScript("addMarker", new object[] { lat, lon });
}

這是嵌入本地html文件中的javascript函數:

function addMarker(Lat,Long) {
    for (var i=0;i<Lat.length; i++){
        var latLng = new google.maps.LatLng(Lat[i],Long[i]);
        var marker = new google.maps.Marker({
            position: latLng,
            title: 'Hello World!',
            map: map
        });
    }
    } // end of addMarker

當我使用VS 2015編譯該程序並單擊按鈕以調用此js腳本時,總是收到一條錯誤消息,告訴我在'var'之后該行中應有一個函數

for (var i=0;i<Lat.length; i++){

VS的異常報告是這樣的:System.Runtime.InteropServices.COMException來自HRESULT的異常:0x80020101,異常的位置就在這里:

webBrowser1.InvokeScript("addMarker", new object[] { lat, lon });

我對Java編程非常陌生。 請幫忙。

據我所知,不可能直接傳遞數組。

您應該將其作為JSON字符串傳遞。 (我正在通過NuGet使用NewtonSoft !)

guiWebbrowser.InvokeScript("addMarker", JsonConvert.SerializeObject(new
         {
            Lat = new int[] { 10, 20, 30 },
            Long = new int[] { 10, 20, 30 }
         }));

您的JS函數應如下所示:

function addMarker(jsonArg) {
   var args = JSON.parse(jsonArg);
   for (var i = 0; i < args.Lat.length; i++) {
      var latLng = new google.maps.LatLng(args.Lat[i], args.Long[i]);
      var marker = new google.maps.Marker({
         position: latLng,
         title: 'Hello World!',
         map: map
      });
   }
} // end of addMarker

您可能會收到此錯誤消息: JSON is undefined

看到這樣的答案: https : //stackoverflow.com/a/22287896/3631348

您應該在應用程序中的任何位置調用此函數:

public void ModifyBrowserEmulation(int version = 11001)
{
   // see https://stackoverflow.com/a/22287896/3631348 --> edit your application name ! or get it via Reflection !

   var appExe = System.IO.Path.GetFileName(Assembly.GetExecutingAssembly().Location);
   Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appExe, version, RegistryValueKind.DWord);
   Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appExe.Replace(".exe", ".vshost.exe"), version, RegistryValueKind.DWord);

   Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appExe, version, RegistryValueKind.DWord);
   Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appExe.Replace(".exe", ".vshost.exe"), version, RegistryValueKind.DWord);
}

另一個有用的文章: https : //stackoverflow.com/a/31728506/3631348如何從您的JS代碼寫入控制台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM