使用WebKit.NET从JavaScript调用C#函数

时间:2010-11-10 16:34:38

标签: c# webkit

我一直在c#win表单项目中使用webkit.net,并且喜欢用C#程序调用JavaScript函数是多么容易:

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

现在问题是如何以相反的方式执行此操作...是否有某种事件侦听器可以侦听javascript函数调用,或者通过webkit浏览器中运行的JavaScript调用ac#方法的任何方式?

我正在使用糟糕的黑客攻击的方式...看看可用的事件监听器,我联系到TitleChanged事件,并读取隐藏的{的值html中的{1}}字段....这非常糟糕,需要一个实际的解决方案。

提前致谢,   - 格雷格。

2 个答案:

答案 0 :(得分: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);
        }
    }

这可能无法通过你的Ugly Hack测试,但它是处理来自.net嵌入式浏览器的请求的古老方法。基本上,您在浏览器中拦截URL GET请求。如果URL包含关键字(例如app://),则取消GET并处理URL参数。返回一个值,传统上是通过调用Navigate方法完成的,但是,使用你在帖子中描述的方法,你可以直接调用一个javascript函数。

答案 1 :(得分:5)

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