繁体   English   中英

InvokeScript无法正常工作

[英]InvokeScript not working properly

我正在使用WebBrowser加载页面。 完成后,我将在该页面上调用ajax,但是我的代码不会等待该ajax调用完成; 这是代码:

Thread thread2 = new Thread(() =>
        {
            WebBrowser browser = new WebBrowser();
            browser.ScrollBarsEnabled = false;
            browser.ScriptErrorsSuppressed = true;

            browser.Navigate("http://localhost/testpdf.html");
            while (browser.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
            var d = browser.Document.InvokeScript("$.ajax({type: 'GET', async:false,url: 'http://localhost/test2.html',complete: function (data) {                     $('body').html(d) } }); return $('body').html()"); //ajax
        });
        thread2.SetApartmentState(ApartmentState.STA);
        thread2.Start();
        thread2.Join();

d始终为null

调用InvokeScript ,它旨在执行页面的JavaScript中已定义的功能。 对于您的情况,您打算提供新的JavaScript,然后调用它。 为了使它起作用,您要么需要在页面中将JavaScript定义为一个函数,然后调用它,要么使用内置函数( eval )为您执行代码。 这称为“脚本注入”,是您要在此处使用的技术。 在这种情况下,请尝试eval

string scriptToRun = "$.ajax({type: 'GET', async:false,url: 'http://localhost/test2.html', success: function (data) { $('body').html(data); }, complete: function () {} }); $('body').html();"; //ajax
var d = browser.Document.InvokeScript("eval", new Object[] { scriptToRun});

请注意,我不会“返回”结果,而只是将其列出为最后一条命令,因为这不是函数,而是要评估的脚本。 还要注意,您要在$.ajax调用中使用success处理程序,因为这将是获取结果的处理程序。 查看jQuery ajax的文档,您会发现complete无法获得您期望的参数,尽管如果您要跟踪状态,则可以包括complete处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM