Использование WebKit.NET для вызова функции C # из JavaScript - PullRequest
7 голосов
/ 10 ноября 2010

Я играл с webkit.net в проекте c # win, и мне нравится, как легко вызывать функции JavaScript из программы C # с помощью:

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

Теперь вопрос заключается в том, как сделать это наоборот ... Есть ли какой-то прослушиватель событий, который может прослушивать вызов функции javascript или любой способ вызвать метод ac # через JavaScript, работающий в браузере webkit

То, как я это делаю в данный момент, с использованием плохого хака ... Посмотрев на доступные прослушиватели событий, я подключился к событию TitleChanged и прочитал значение скрытого input поле в HTML .... это действительно плохо и нуждается в реальном решении.

Спасибо заранее, - Грег.

Ответы [ 2 ]

11 голосов
/ 21 июня 2011
    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.По сути вы перехватываете запрос GET URL в браузере.Если URL содержит ключевое слово (например, app: //), вы отменяете GET и обрабатываете параметры URL.Возвращение значения традиционно выполнялось путем вызова метода Navigate, однако, используя метод, описанный в вашем сообщении, вы можете просто напрямую вызвать функцию javascript.

5 голосов
/ 12 ноября 2010

На github есть ветвь, которая добавляет поддержку для этого с помощью скриптового объекта (работает аналогично стандартному браузеру winforms).Когда браузер загружается, вы можете установить объект сценария, класс, который будет обрабатывать ваши js-вызовы, используя webKitBrowser.ObjectForScripting = myObject.Затем из js вы можете вызвать метод с помощью window.external.foo ().Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...