使用WebBrowser控件,我大致执行以下步骤:
about:blank
”。DocumentCompleted
事件处理程序中启用设计模式。#
的HTML字符串作为网址。第2步是通过这种方式完成的:
private void webBrowser1_DocumentCompleted(
object sender,
WebBrowserDocumentCompletedEventArgs e)
{
dynamic axObj = webBrowser1.ActiveXInstance;
axObj.document.designmode = "On";
}
步骤3以这种方式完成:
private void button1_Click(object sender, EventArgs e)
{
var doc = (HTMLDocument)webBrowser1.Document.DomDocument;
var selection = doc.selection;
var range = (IHTMLTxtRange)selection.createRange();
range.pasteHTML("<p><a href=\"#\">Read more</a></p>");
}
步骤4以这种方式完成:
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(this, webBrowser1.DocumentText);
}
我的期望:
我希望得到一个像这样的HTML字符串:
<html><body>
<p><a href="#">Read more</a></p>
</body></html>
实际得到的内容:
我得到一个HTML字符串,其中#
网址以当前文档的网址为前缀:
<html><body>
<p><a href="about:blank#">Read more</a></p>
</body></html>
无论我是导航到about:blank
还是例如,都会发生这种情况。 https://www.google.com
或任何其他网址。
我的问题:
有没有办法阻止IE / mshtml / WebBrowser控件在粘贴锚点时为当前加载的URL添加前缀?
更新1:
我能想到的一个可能的解决方法是粘贴绝对网址,例如http://pseudo-hash.com
而不是#
以及稍后从WebBrowser控件返回HTML时,请执行字符串替换并将伪占位符网址替换为#
。