如何防止粘贴的网址变得绝对?

时间:2017-06-23 08:52:09

标签: c# .net winforms webbrowser-control mshtml

使用WebBrowser控件,我大致执行以下步骤:

  1. 导航至“about:blank”。
  2. DocumentCompleted事件处理程序中启用设计模式。
  3. 粘贴带有#的HTML字符串作为网址。
  4. 从WebBrowser控件中读取文档。
  5. 第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时,请执行字符串替换并将伪占位符网址替换为#

0 个答案:

没有答案