【问题标题】:Dynamically creating a new CSS class in a webbrowser document?在网络浏览器文档中动态创建新的 CSS 类?
【发布时间】:2013-11-06 21:39:50
【问题描述】:

使用 VB.NET 2010 (Winforms) 并以 .NET 2.0 框架为目标。

在表单加载时,我有一个导航到特定 URL 的网络浏览器控件。浏览器完全加载该 URL 后,我单击 button1,我想要执行以下操作 -> 在加载的网页 DOM 的“head”部分中动态创建一个名为“dashedBorder”的新 CSS 类。这是button1的点击事件代码...

    Dim Document As HtmlDocument = WebBrowser1.Document
    Dim Head As HtmlElement = Document.GetElementsByTagName("head")(0)

    Dim SelectedStyle As HtmlElement = Document.CreateElement("style")
    SelectedStyle.InnerText = ".dashedBorder {border: 2px dashed yellow !important;}"
    Head.AppendChild(SelectedStyle)

当我运行上述代码时,我收到一条 VB 错误消息,指出“这种类型的 HtmlElement 不支持该属性”。

任何想法如何在这种情况下创建新的 CSS 类?仅供参考,此时我不想将该 CSS 分配给任何特定元素——我只是希望创建类(在 DOM 中),以便稍后在代码中使用 jQuery 打开和关闭该类。

【问题讨论】:

  • 做一些关于如何在javascript中创建样式元素的研究。这将为您指明正确的方向。

标签: vb.net winforms webbrowser-control


【解决方案1】:

This question 是一个很好的起点,但实际上让它在所有 IE 版本的WebBrowser 控件中工作比那里描述的更简单:

  • 首先,需要访问SelectedStyle样式对象(NativeSelectedStyle = SelectedStyle.DomElement)后面的原生DOM元素;
  • 那么,NativeSelectedStyle.type需要设置为"text/css"
  • 此时,NativeSelectedStyle.styleSheet 可用,否则为 Nothing
  • NativeSelectedStyle.styleSheet.cssText 设置为您的样式表内容。

完整示例:

Public Class Form1
    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim Document As HtmlDocument = WebBrowser1.Document
        Dim Head As HtmlElement = Document.GetElementsByTagName("head")(0)

        Dim SelectedStyle As HtmlElement = Document.CreateElement("style")

        Dim NativeSelectedStyle = SelectedStyle.DomElement
        NativeSelectedStyle.type = "text/css"
        ' NativeSelectedStyle.innerHTML = ".dashedBorder { ... }" throws an error
        NativeSelectedStyle.styleSheet.cssText = ".dashedBorder {border: 2px dashed yellow !important;}"

        Head.AppendChild(SelectedStyle)

        MessageBox.Show(SelectedStyle.OuterHtml)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("about:blank")
    End Sub
End Class

[EDITED] 现在我发现我基本上复制了this answer,所以功劳应该归于@paracycle。把它变成一个 wiki。

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多