[英]Using Javascript for Google Maps API from WPF
我正在創建一個與Google Maps API v3接口的應用程序。 我當前的方法是使用WebBrowser.Navigate("Map.html")
的WebBrowser
控件。 目前,此功能正常運行; 但是,我也知道WebBrowser.InvokeScript()
。 我已經看到了用來執行javascript函數的代碼,但是我希望具有以下結構:
APICalls.js-包含可以調用的不同函數,或者如有必要,甚至可以分隔成每個函數的文件。
MapInterface.cs
WebBrowser.InvokeScript("APICalls.js", args)
-或直接控制javascript變量。
我已經看到了使用InvokeScript
方法的方法,但是這些示例都沒有提供函數源的任何細節,因此我不確定它是從html文件還是js文件調用它。 是否有可能具有這樣的結構或類似的組織結構,而不是在每個文件中都使用javascript並使用Navigate()
創建一個html文件?
此外,還有其他更簡便的方法可以將Google Maps與WPF結合使用。 我檢查了一下,但是發現的所有資源至少有2-3年的使用時間,我認為這些資源比最新版本的maps API還要舊。
我無法建議使用WPF使用Google Maps API的更好方法(盡管我確定它存在),但是我可以嘗試回答其余問題。
首先,請確保為您的WebBrowser應用程序啟用FEATURE_BROWSER_EMULATION
,以便Google Maps API能夠識別它為現代HTML5功能的瀏覽器。
然后,導航到“ Map.html”頁面,使其完成加載。 這是使用async/await
來完成的(代碼是WebBrowser
控件的WinForms版本的,但是概念保持不變)。
您可以將APICalls.js作為一個單獨的本地文件,但需要從C#中為其創建並填充<script>
元素。 您只需為該會話執行一次。
例:
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!");
[更新]如果您正在尋找更多模塊化或面向對象的方法,則可以利用C#的dynamic
功能。 例:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.