从WPF中的Web浏览器调用HTML页面中的JavaScript函数

3

我对WPF不太熟悉。在我的wpf应用程序中,我使用“WebBroswer”来呈现Google地图。我有一个googlemap.htm页面,其中包含一个initialize(lat, log) JavaScript函数。现在我想从我的.xaml.cs文件中调用此函数,并传入lat和log参数。

Googlemap.htm

 <script>
        function initialize(lat, log) {
            var mapProp = {
                center: new google.maps.LatLng(lat, log),
                zoom: 5,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    </script>
1个回答

7
最简单的方法是使用WebBrowser.InvokeScript方法:
 this.WebBrowser.InvokeScript("initialize", 1, 2);

另一种方法是将您的JavaScript代码重写如下:

 function initialize(lat, log) {
    var mapProp = {
       center: new google.maps.LatLng(lat, log),
       zoom: 5,
       mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
 }

 document.myfunc = initialize; // expose it to the document scope

 google.maps.event.addDomListener(window, 'load', initialize);

现在您可以从C#代码中访问myfunc
private void WebBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)
{
    dynamic document = WebBrowser.Document;

    document.myfunc(1, 2);
}

您可以在不使用 dynamic 关键字的情况下调用 myfunc 函数:
private void WebBrowser_OnLoadCompleted(object sender, NavigationEventArgs e)
{    
   var document = this.WebBrowser.Document;

   document.GetType().InvokeMember("myfunc", BindingFlags.InvokeMethod, null, document, new object[] {1, 2});
}

我正在使用 VS 2008。动态密钥不受支持。需要帮助。 - Mahesh
我遇到了这个错误:未知名称。(HRESULT 异常:0x80020006 (DISP_E_UNKNOWNNAME))。请帮忙解决。 - Mahesh
确保您的页面在没有任何Internet Explorer警告的情况下正确加载。当我测试这段代码时,出现了有关ActiveX内容或类似内容的警告。 - SHSE
请查看此文章:http://msdn.microsoft.com/zh-cn/library/ms537628(v=VS.85).aspx - SHSE
非常感谢您的帖子。我已经更改了我的代码,但仍然出现错误。我在下面的链接中发布了我的完整代码:https://dev59.com/JG3Xa4cB1Zd3GeqPgp6B。您能帮助我吗? - Mahesh
是的,我明白了问题所在。我试图在未加载HTML页面的情况下调用JavaScript函数。因此,我首先加载了HTML页面,然后调用了JavaScript函数,现在它可以正常工作了。非常感谢您的回复和帮助。 - Mahesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接