我正在尝试模拟Windows窗体中Visual Studio随附的 webbrowser控件中的拖放。问题似乎是,我在网络浏览器中注入的javascript代码似乎并非总是能够按预期工作,就像通过chrome控制台甚至是IE控制台键入时一样。
似乎是一个问题,源于我尝试在其上进行操作的网站的工作方式。我已经通过chrome控制台在该网站上尝试了我的javascript代码,并且它按预期方式工作,但通过我的inject方法进行注入时却无法正常工作,至少并非总是如此。
这是我用来在浏览器中注入javascript的代码:
private void InjectJS(string js)
{
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function inject() {"+js+"}";
head.AppendChild(scriptEl);
currentDocument.InvokeScript("inject");
}
这是我要注入的代码:
function downfa(t){["mouseover","mousedown","mouseup","click"].forEach(function(e){!function(e,t){var n=document.createEvent("MouseEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,e)})}
downfa(loginsubmit);
//Note: This is some code to click an element. element.click() is not what I want to do.
在chrome和webbrowser(其中“测试”按钮只是在下面调用代码)上的duckduckgo(单击鸭子)上都可以正常工作
InjectJS(File.ReadAllText("SimpleCode.txt"));
但是,在其他网站上,它可以按预期在chrome上运行,但在webbrowser上却没有任何作用
为我的应用启用脚本调试后,我发现未定义“ loginsubmit”,即使很明显是在使用chrome时。
总而言之,我期望我可以在每个网站上的每个元素上使用“点击代码”,并且通过开发者控制台在chrome或IE这样的浏览器中也可以使用,但是有时仅是在C#的Windows窗体Web浏览器中。
与浏览器动态运行javascript相比,我的注入代码是否有所不同?