WebBrowser InvokeScript 在脚本 CDATA 注释时不起作用?

WebBrowser InvokeScript doesn't work when script CDATA commented?

提问人:Alexander PhoeniX 提问时间:2/17/2017 更新时间:2/17/2017 访问量:82

问:

HTML 脚本标签包含函数

  <script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

我需要从 C# 执行 javascript。我的代码:

var webbrowser = new WebBrowser();
        var uri = new Uri(param.FinalUrl);
        webbrowser.Navigate(uri);
        while (webbrowser.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
            Thread.Sleep(100);
        }
var args = new object[] { "ctl00$cphBody$gvTradeList", "Page$3" };
var result = webbrowser.Document.InvokeScript("__doPostBack", args);

但 InvokeScript 始终返回 null 且 DocumentText 不更改。问题是否可能是由 CDATA 标记中的注释引起的?如果这是原因,在这种情况下如何执行javascript?

JavaScript C# XHTML 调用脚本

评论

0赞 Mr Lister 2/17/2017
CDATA 开始和结束分隔符位于 JavaScript 注释中,因此完全删除它们没有任何区别。(无论如何,HTML 都不支持 CDATA,所以没关系。也就是说,导致问题的可能不是 CDATA 块。
0赞 Mr Lister 2/17/2017
是否确定窗体名为“aspnetForm”?看看 C#,这是经典的 WebForms,其中系统倾向于通过在标识符前面加上“ctl00$cphBody$”之类的东西来“限定”标识符。因此,请查看生成的 HTML(即浏览器中的“查看源代码”),看看表单现在的真正名称。

答: 暂无答案