Cefsharp winforms:将jquery注入页面

时间:2016-05-03 08:20:30

标签: c# jquery winforms chromium-embedded cefsharp

我正在使用ChromiumWebBrowser加载网站,加载页面后,我会执行一些脚本

browser.ExecuteScriptAsync(script)

但该网站不使用jquery,因此很难编写我的脚本代码。我想将jquery注入该站点以便更轻松地编写脚本。我该怎么做?非常感谢你

编辑:

我的计算机上有一个jquery文件。我想将它添加到我想要抓取数据的页面。我尝试使用LoadingStateChanged事件,但没有用。

private void Browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
    ChromiumWebBrowser browser = (ChromiumWebBrowser)sender;
    lbStatus.SetText(e.IsLoading ? "Loading..." : browser.Address);
    if (!e.IsLoading)
    {
        //Load jquery
    }
    else
    {

    }
}

3 个答案:

答案 0 :(得分:10)

将此代码设置为script变量为字符串,然后调用browser.ExecuteScriptAsync(script)

(function () {
    // more or less stolen form jquery core and adapted by paul irish
    function getScript(url, success) {
        var script = document.createElement('script');
        script.src = url;
        var head = document.getElementsByTagName('head')[0],
            done = false;
        // Attach handlers for all browsers
        script.onload = script.onreadystatechange = function () {
            if (!done && (!this.readyState
                || this.readyState == 'loaded'
                || this.readyState == 'complete')) {
                done = true;
                success();
                script.onload = script.onreadystatechange = null;
                head.removeChild(script);
            }
        };
        head.appendChild(script);
    }
    getScript('http://code.jquery.com/jquery-latest.min.js', function () {
        if (typeof jQuery == 'undefined') {
            console.log('Sorry, but jQuery wasn\'t able to load');
        } else {
            console.log('This page is now jQuerified with v' + $.fn.jquery);

            $(document).ready(function () {
                alert(1);
                //here you can write your jquery code
            });
        }
    });
})();

答案 1 :(得分:5)

我将整个jquery js文件作为内联代码推送并且效果很好:

browser.ExecuteScriptAsync(File.ReadAllText(@"content\jquery.1.11.1.min.js"));

减少加载时间......

答案 2 :(得分:0)

这很容易:)

string script_1 =“ document.getElementsByTagName('head')[0] .appendChild(document.createElement('script'))。src ='//ajax.googleapis.com/ajax/libs/jquery/2.1。 1 / jquery.min.js'“;

browser.ExecuteScriptAsync(script_1);

并用于调用任何自定义jquery函数或类:

string script_2 =“ $('。contact')。css('color','#aabbcc');”;

browser.ExecuteScriptAsync(script_2);