![](/img/trans.png)
[英]How can I pass a JSON array to a javascript function in the C# WebBrowser Control?
[英]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.