簡體   English   中英

從WPF使用Javascript for Google Maps API

[英]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.

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