【发布时间】:2011-11-09 05:28:56
【问题描述】:
我正在尝试更改 WebBrowser 控件中隐藏字段的值。
我可以注入显示警告框的 Javascript。我可以让警报框显示隐藏字段的当前值。但是,我无法更改隐藏字段的值。
我已经尝试通过这样做来更改值(tb 是 WebBrowser 控件):
HtmlElement head = tb.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = tb.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function DoIt() { document.getElementById('TestHiddenField').value='Hello World'; alert('Updated'); }";
head.AppendChild(scriptEl);
tb.Document.InvokeScript("DoIt");
在上面确实弹出了警报。
我已经试过了:
tb.Document.Body.InnerHtml = tb.Document.Body.InnerHtml.Replace("MyValue", "YourValue");
在上面我看到 InnerHtml 在调试时确实发生了变化。
但是,当页面完成加载并查看源代码时,该值永远不会改变。
另外,即使我可以注入 javascript 并弹出警报,我也永远无法在代码中找到 javascript。
发生了什么事?我做错了什么?
谢谢!
更新:
我在 DocumentCompleted 事件中执行此操作。
我没有使用 ViewState
另一个更新:
我添加了另一个字段。这次是一个非隐藏的文本字段。
<input type="hidden" id="TestHiddenField" value="MyValue" name="TestHiddenField" />
<input type="text" id="TestField" value="MyValue" name="TestField" />
当我这样做时会发生以下情况:
tb.Document.Body.InnerHtml = tb.Document.Body.InnerHtml.Replace("MyValue", "YourValue");
当页面在 WebBrowser 控件中呈现时,文本框会显示文本“YourValue”,但当我查看源代码时,该值仍等于“MyValue”。
那是怎么回事?我需要它等于“YourValue”。
有什么想法吗?
再次感谢!
【问题讨论】:
标签: c# winforms webbrowser-control