Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Web浏览器控件中调用Javascript测试单击_C#_Javascript_Browser - Fatal编程技术网

C# 在Web浏览器控件中调用Javascript测试单击

C# 在Web浏览器控件中调用Javascript测试单击,c#,javascript,browser,C#,Javascript,Browser,我试图调用一个JS脚本,它模拟在WebBrowser控件中单击某个元素 我目前正在这样做: webBrowser2.Invoke(new Action(() => { HtmlElement head = webBrowser2.Document.GetElementsByTagName("head")[0]; HtmlElement testScript = webBrowse

我试图调用一个JS脚本,它模拟在WebBrowser控件中单击某个元素

我目前正在这样做:

webBrowser2.Invoke(new Action(() =>
                {
                    HtmlElement head = webBrowser2.Document.GetElementsByTagName("head")[0];
                    HtmlElement testScript = webBrowser2.Document.CreateElement("script");
                    IHTMLScriptElement element = (IHTMLScriptElement)testScript.DomElement;
                    element.text = "function simulate(g,c){var e=extend(defaultOptions,arguments[2]||{});var b,f=null;for(var d in eventMatchers){if(eventMatchers[d].test(c)){f=d;break}}if(!f){throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported')}if(document.createEvent){b=document.createEvent(f);if(f=='HTMLEvents'){b.initEvent(c,e.bubbles,e.cancelable)}else{b.initMouseEvent(c,e.bubbles,e.cancelable,document.defaultView,e.button,e.pointerX,e.pointerY,e.pointerX,e.pointerY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,g)}g.dispatchEvent(b)}else{e.clientX=e.pointerX;e.clientY=e.pointerY;var a=document.createEventObject();b=extend(a,e);g.fireEvent('on'+c,b)}return g}function extend(a,c){for(var b in c){a[b]=c[b]}return a}var eventMatchers={HTMLEvents:/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,MouseEvents:/^(?:click|dblclick|mouse(?:down|up|over|move|out))$/};var defaultOptions={pointerX:0,pointerY:0,button:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,bubbles:true,cancelable:true};function TestClick(){simulate(document.getElementById('flls').firstChild,'click')};";
                    head.AppendChild(testScript);
                    webBrowser2.Document.InvokeScript("TestClick");

                    string TestUrl = webBrowser2.Url.AbsoluteUri;
                    if (TestUrl.Equals(expected))
                    {
                        HasSucceeded = 1;
                    }
                    else
                    {
                        // No test
                    }
                }));
长模拟函数来自另一个StackOverflow答案。当我在IE9上的WebdevTools控制台中键入该脚本时,它工作正常,但该脚本根本不工作。我做错了什么?

[编辑] 我下面说的是不正确的。语法正确,
webBrowser2.Document.InvokeScript(“TestClick”)
应执行与
webBrowser2.InvokeScript(“TestClick”)
相同的工作。我会试试你的密码然后回来

我认为正确的语法应该是:

webBrowser2.Document.InvokeScript("TestClick()");
注意
()
测试之后单击

或者你可以:

webBrowser2.InvokeScript("TestClick");

[编辑] 最初加载到WB中的HTML有点问题,也许您应该将其包含在问题中。以下只是代码的副本(除了
this.webBrowser2.DocumentText
),它确实有效,
TestClick
被调用

    private void Form1_Load(object sender, EventArgs e)
    {
        this.webBrowser2.DocumentText = "<body><div id=flls><button onclick='alert(true)'>go</button></div></body>";
        this.webBrowser2.DocumentCompleted += webBrowser2_DocumentCompleted;
    }

    void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlElement head = webBrowser2.Document.GetElementsByTagName("head")[0];
        HtmlElement testScript = webBrowser2.Document.CreateElement("script");
        IHTMLScriptElement element = (IHTMLScriptElement)testScript.DomElement;
        element.text = "function simulate(g,c){var e=extend(defaultOptions,arguments[2]||{});var b,f=null;for(var d in eventMatchers){if(eventMatchers[d].test(c)){f=d;break}}if(!f){throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported')}if(document.createEvent){b=document.createEvent(f);if(f=='HTMLEvents'){b.initEvent(c,e.bubbles,e.cancelable)}else{b.initMouseEvent(c,e.bubbles,e.cancelable,document.defaultView,e.button,e.pointerX,e.pointerY,e.pointerX,e.pointerY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,g)}g.dispatchEvent(b)}else{e.clientX=e.pointerX;e.clientY=e.pointerY;var a=document.createEventObject();b=extend(a,e);g.fireEvent('on'+c,b)}return g}function extend(a,c){for(var b in c){a[b]=c[b]}return a}var eventMatchers={HTMLEvents:/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,MouseEvents:/^(?:click|dblclick|mouse(?:down|up|over|move|out))$/};var defaultOptions={pointerX:0,pointerY:0,button:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,bubbles:true,cancelable:true};function TestClick(){simulate(document.getElementById('flls').firstChild,'click')};";
        head.AppendChild(testScript);
        webBrowser2.Document.InvokeScript("TestClick");
    }
private void Form1\u加载(对象发送方,事件参数e)
{
this.webBrowser2.DocumentText=“go”;
this.webBrowser2.DocumentCompleted+=webBrowser2_DocumentCompleted;
}
作废webBrowser2\u文档已完成(对象发送者,WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement head=webBrowser2.Document.GetElementsByTagName(“head”)[0];
HtmleElement testScript=webBrowser2.Document.CreateElement(“脚本”);
IHTMLScript元素=(IHTMLScript元素)testScript.doElement;
element.text=“function simulate(g,c){var e=extend(defaultOptions,arguments[2]|{});var b,f=null;for(vard in eventMatchers){if(eventMatchers[d].test(c)){f=d;break}}if(!f){抛出新的语法错误('仅支持HTMLEvents和MouseEvents接口')}if(document.createEvent){b=document.createEvent(f){if(f='htmlevent'){b.initEvent(f){(c,e.bubbles,e.cancelable)else{b.initMouseEvent(c,e.bubbles,e.cancelable,document.defaultView,e.button,e.pointerX,e.pointerY,e.pointerY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,g)}g.dispatchEvent(b)}else{e.clientX=e.pointerX=e.pointerY;var=document.createventObject();b=extend(a,e.altKey),e.element('s),e.feature+event,g)}函数扩展(a,c){for(c中的var b){a[b]=c[b]}返回a}var事件匹配器={HTMLEvents:/^(?:加载|卸载|中止|错误|选择|更改|提交|重置|焦点|模糊|调整大小|滚动)$/,MouseEvents:/^(?:点击| dblclick |鼠标(?:向下|向上| | | | | | | | | | | | | |={pointerX:0,pointerY:0,button:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,bubbles:true,cancelable:true};函数TestClick(){simulate(document.getElementById('flls').firstChild,'click')};“;
head.AppendChild(testScript);
webBrowser2.Document.InvokeScript(“TestClick”);
}
[编辑] 我下面所说的是不正确的。您的语法是正确的,
webBrowser2.Document.InvokeScript(“TestClick”)
应该与
webBrowser2.InvokeScript(“TestClick”)
做同样的工作。我将尝试您的代码并返回这里

我认为正确的语法应该是:

webBrowser2.Document.InvokeScript("TestClick()");
注意
()
测试之后单击

或者你可以:

webBrowser2.InvokeScript("TestClick");

[编辑] 最初加载到WB中的HTML有问题,也许您应该将其包含在问题中。以下只是您的代码副本(除了
this.webBrowser2.DocumentText
),它确实有效,
TestClick
被调用

    private void Form1_Load(object sender, EventArgs e)
    {
        this.webBrowser2.DocumentText = "<body><div id=flls><button onclick='alert(true)'>go</button></div></body>";
        this.webBrowser2.DocumentCompleted += webBrowser2_DocumentCompleted;
    }

    void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlElement head = webBrowser2.Document.GetElementsByTagName("head")[0];
        HtmlElement testScript = webBrowser2.Document.CreateElement("script");
        IHTMLScriptElement element = (IHTMLScriptElement)testScript.DomElement;
        element.text = "function simulate(g,c){var e=extend(defaultOptions,arguments[2]||{});var b,f=null;for(var d in eventMatchers){if(eventMatchers[d].test(c)){f=d;break}}if(!f){throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported')}if(document.createEvent){b=document.createEvent(f);if(f=='HTMLEvents'){b.initEvent(c,e.bubbles,e.cancelable)}else{b.initMouseEvent(c,e.bubbles,e.cancelable,document.defaultView,e.button,e.pointerX,e.pointerY,e.pointerX,e.pointerY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,g)}g.dispatchEvent(b)}else{e.clientX=e.pointerX;e.clientY=e.pointerY;var a=document.createEventObject();b=extend(a,e);g.fireEvent('on'+c,b)}return g}function extend(a,c){for(var b in c){a[b]=c[b]}return a}var eventMatchers={HTMLEvents:/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,MouseEvents:/^(?:click|dblclick|mouse(?:down|up|over|move|out))$/};var defaultOptions={pointerX:0,pointerY:0,button:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,bubbles:true,cancelable:true};function TestClick(){simulate(document.getElementById('flls').firstChild,'click')};";
        head.AppendChild(testScript);
        webBrowser2.Document.InvokeScript("TestClick");
    }
private void Form1\u加载(对象发送方,事件参数e)
{
this.webBrowser2.DocumentText=“go”;
this.webBrowser2.DocumentCompleted+=webBrowser2_DocumentCompleted;
}
作废webBrowser2\u文档已完成(对象发送者,WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement head=webBrowser2.Document.GetElementsByTagName(“head”)[0];
HtmleElement testScript=webBrowser2.Document.CreateElement(“脚本”);
IHTMLScript元素=(IHTMLScript元素)testScript.doElement;
element.text=“function simulate(g,c){var e=extend(defaultOptions,arguments[2]|{});var b,f=null;for(vard in eventMatchers){if(eventMatchers[d].test(c)){f=d;break}}if(!f){抛出新的语法错误('仅支持HTMLEvents和MouseEvents接口')}if(document.createEvent){b=document.createEvent(f){if(f='htmlevent'){b.initEvent(f){(c,e.bubbles,e.cancelable)else{b.initMouseEvent(c,e.bubbles,e.cancelable,document.defaultView,e.button,e.pointerX,e.pointerY,e.pointerY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,g)}g.dispatchEvent(b)}else{e.clientX=e.pointerX=e.pointerY;var=document.createventObject();b=extend(a,e.altKey),e.element('s),e.feature+event,g)}函数扩展(a,c){for(c中的var b){a[b]=c[b]}返回a}var事件匹配器={HTMLEvents:/^(?:加载|卸载|中止|错误|选择|更改|提交|重置|焦点|模糊|调整大小|滚动)$/,MouseEvents:/^(?:点击| dblclick |鼠标(?:向下|向上| | | | | | | | | | | | | |={pointerX:0,pointerY:0,button:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,bubbles:true,cancelable:true};函数TestClick(){simulate(document.getElementById('flls').firstChild,'click')};“;
head.AppendChild(testScript);
webBrowser2.Document.InvokeScript(“TestClick”);
}