我无法建议将 Google Maps API 与 WPF 一起使用的更好方法(尽管我确信它存在),但我可以尝试回答其余问题。
首先,确保启用FEATURE_BROWSER_EMULATION
您的 WebBrowser 应用程序,以便 Google Maps API 将其识别为支持 HTML5 的现代浏览器。
然后,导航到“Map.html”页面并让它完成加载。这是如何使用它来完成async/await
的(代码是针对 WinForms 版本的WebBrowser
控件,但概念保持不变)。
您可以将 APICalls.js 作为单独的本地文件,但您需要<script>
从 C# 为其创建和填充元素。您为会话执行一次。
例子:
var scriptText = File.ReadAllText("APICalls.js");
dynamic htmlDocument = webBrowser.Document;
var script = htmlDocument.createElement("script");
script.type = "text/javascript";
script.appendChild(htmlDocument.createTextNode(scriptText));
htmlDocument.body.appendChild(script);
例如,APICalls.js 中的 JavaScript 入口点函数可能如下所示:
(function() {
window.callMeFromCsharp = function(arg1, arg2) {
window.alert(arg1 + ", " +arg2);
}
})();
您可以像这样从 C# 调用它:
webBrowser.InvokeScript("callMeFromCsharp", "Hello", "World!");
[更新]如果您正在寻找更模块化或面向对象的方法,您可以利用dynamic
C# 的特性。例子:
JavaScript:
(function() {
window.apiObject = function() {
return {
property: "I'm a property",
Method1: function(arg) { alert("I'm method 1, " + arg); },
Method2: function() { return "I'm method 2"; }
};
}
})();
C#:
dynamic apiObject = webBrowser.InvokeScript("apiObject");
string property = apiObject.property;
MessageBox.Show(property);
apiObject.Method1("Hello!");
MessageBox.Show(apiObject.Method2());