2010-11-10 179 views
7

我一直在使用ac#win forms项目中的webkit.net玩,并且很喜欢从C#程序中调用JavaScript函数的容易程度:使用WebKit.NET从JavaScript调用C#函数

browser.Document.InvokeScriptMethod("functionName", new object[]{"parameter1", "parameter2"});

现在的问题是如何做到另一种方式......是否有某种事件侦听器,可以侦听一个JavaScript函数调用,或任何方式来调用ac#方法通过JavaScript运行在webkit浏览器?

我现在这样做的方式,它使用一个坏的黑客...看看可用的事件侦听器,我迷上了TitleChanged事件,并阅读隐藏的input字段的值在HTML ....这是非常糟糕的,需要一个实际的解决方案。

在此先感谢, - Greg。

回答

11
public Form1() 
    { 
     InitializeComponent(); 
     webKitBrowser1.Navigating += new WebBrowserNavigatingEventHandler(Form1_Navigating); 
    } 


    private void Form1_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
    { 
     string url = e.Url.ToString(); 
     if (url.IndexOf("app://") > -1) 
     { 
      e.Cancel = true; 
      processRequest(url); 
     } 
    } 

这可能不是通过你的丑陋的黑客攻击测试,但对于从.NET嵌入式浏览器处理请求的古老的方法。本质上,你在浏览器中拦截URL GET请求。如果网址包含关键字(如app://),则取消GET并处理URL参数。返回值通常是通过调用Navigate方法完成的,但是,使用您在文章中描述的方法,您可以直接调用JavaScript函数。

+0

非常好的实现。 – Greg 2011-06-21 08:26:14

5

github上有一个分支,它为脚本对象添加了对此的支持(类似于标准winforms浏览器)。当浏览器加载时,您可以使用webKitBrowser.ObjectForScripting = myObject来设置脚本对象,该对象将处理您的js调用。然后从js中可以通过使用window.external.foo()来调用该方法。希望这可以帮助。

+0

如果我包含链接,它会有所帮助:) https://github.com/scampy/webkitdotnet – Kevin 2010-11-12 20:03:16

+0

任何人都可以找到一个成功编译的webkitdotnet版本启用此功能吗?谢谢。 – 2012-06-13 13:56:59