C# WebBrowser 控件不应用 css

2024-01-01

我有一个项目,正在使用 VS2005 进行。我添加了一个 WebBrowser 控件。我向控件添加一个基本的空页面

private const string _basicHtmlForm = "<html> "
                                      + "<head> "
                                      + "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> "
                                      + "<title>Test document</title> "
                                      + "<script type='text/javascript'> "
                                      + "function ShowAlert(message) { "
                                      + "   alert(message); "
                                      + "} "
                                      + "</script> "
                                      + "</head> "
                                      + "<body><div id='mainDiv'> "
                                      + "</div></body> "
                                      + "</html> ";

private string _defaultFont = "font-family: Arial; font-size:10pt;";

private void LoadWebForm()
{
    try 
    {
        _webBrowser.DocumentText = _basicHtmlForm;
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}  

然后通过 dom 添加各种元素(使用 _webBrowser.Document.CreateElement)。我还加载了一个 css 文件:

private void AddStyles()
{
    try
    {
        mshtml.HTMLDocument currentDocument = (mshtml.HTMLDocument) _webBrowser.Document.DomDocument;
        mshtml.IHTMLStyleSheet styleSheet = currentDocument.createStyleSheet("", 0);

        TextReader reader = new StreamReader(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"basic.css"));
        string style = reader.ReadToEnd();
        styleSheet.cssText = style;
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

这是CSS页面内容:

body {
    background-color: #DDDDDD;
}

.categoryDiv {
    background-color: #999999;
}

.categoryTable {
    width:599px; background-color:#BBBBBB;
}

#mainDiv {
    overflow:auto; width:600px;
}

样式页面已成功加载,但页面上唯一受影响的元素是页面最初的元素(body 和 mainDiv)。我也尝试过将 css 包含在标题部分的元素中,但它仍然只影响创建页面时存在的元素。

所以我的问题是,有谁知道为什么 css 没有应用于页面加载后创建的元素?我也尝试过在添加所有元素之前不应用 css,但结果没有改变。


我对您的 AddStyles() 方法做了一些修改,它对我有用。 你从哪里调用它?我从“_webBrowser_DocumentCompleted”调用它。

我必须指出,我在修改 DOM 后调用了 AddStyles。

private void AddStyles()
{
    try
    {
        if (_webBrowser.Document != null)
        {
            IHTMLDocument2 currentDocument = (IHTMLDocument2)_webBrowser.Document.DomDocument;

            int length = currentDocument.styleSheets.length;
            IHTMLStyleSheet styleSheet = currentDocument.createStyleSheet(@"", length + 1);
            //length = currentDocument.styleSheets.length;
            //styleSheet.addRule("body", "background-color:blue");
            TextReader reader = new StreamReader(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "basic.css"));
            string style = reader.ReadToEnd();
            styleSheet.cssText = style;

        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

这是我的 DocumentCompleted 处理程序(我向 basic.css 添加了一些样式进行测试):

private void _webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  HtmlElement element = _webBrowser.Document.CreateElement("p");
  element.InnerText = "Hello World1";
  _webBrowser.Document.Body.AppendChild(element);

  HtmlElement divTag = _webBrowser.Document.CreateElement("div");
  divTag.SetAttribute("class", "categoryDiv");
  divTag.InnerHtml = "<p>Hello World2</p>";
  _webBrowser.Document.Body.AppendChild(divTag);


  HtmlElement divTag2 = _webBrowser.Document.CreateElement("div");
  divTag2.SetAttribute("id", "mainDiv2");
  divTag2.InnerHtml = "<p>Hello World3</p>";
  _webBrowser.Document.Body.AppendChild(divTag2);

  AddStyles();
}

这就是我得到的(修改了样式,使其像一个人所希望的那样丑陋:D):

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# WebBrowser 控件不应用 css 的相关文章

随机推荐

  • Chrome“无法拖动”图标会干扰鼠标悬停事件,我该如何防止这种情况?

    下面是一些使用 JavaScript 创建一堆 div 元素来充当像素的代码 我为 mouseover 事件添加了一个事件侦听器 并检查鼠标是否被按下 如果按下鼠标 我会更改该像素的颜色 最终结果是一个简单的绘图函数 我相信使用 HTML5
  • Entity Framework Core:获取所有表的列表

    如何获取数据库上下文中 Entity Framework Core 中所有表的列表 以下答案适用于 Entity Framework 5 中的早期版本 我们目前使用的是 EF Core 3 如何获取 EF 5 中所有实体的列表 https
  • 在 Propel 1.5 中执行多个条件的连接

    这个问题是从问题而来的here https stackoverflow com questions 6877226 rewriting not in sub select as join for propel and here https
  • 带有复杂编辑器的 JTable

    我有许多用于 JTable 的自定义编辑器 可以轻描淡写地说 其可用性 尤其是在使用键盘进行编辑方面 缺乏可用性 主要原因是我的编辑器总是在与此类似 尽管通常更复杂 的情况下创建 Override public Component getT
  • 从 SELECT 插入但更改一列?

    想知道是否有一种方法可以将行从另一个表插入到另一个表中 但一列除外 对于有限数量的列来说 这当然很容易 但是当列数增加时 列出所有列会有点烦人 我在想一些事情 Insert into table select replace col1 wi
  • Autofac。如何使用自定义方法(属性)来解析某些接口?

    我有以下接口 public interface IConfigurationProvider
  • Opera 跨源资源共享

    有人找到了 Opera 关于跨源资源共享的解决方法吗 我想做一个跨域XmlHttpRequest从我放置在 bar com 上的脚本到我的域 foo com The standard http www w3 org TR cors 目前为止
  • 跨文件的代码组织必须处理模板函数和内联

    我正在维护一个大型模板类库 它们基于以下任意一个执行代数计算float or double类型 许多类都有访问器方法 getter 和 setter 和其他运行少量代码的函数 因此当编译器找到它们的定义时 需要将这些函数限定为内联 相比之下
  • 可以聚合根实体调用存储库

    聚合根实体是否可以有一个方法来调用存储库 我知道不应该 但想得到确认 因为埃里克的书也没有明确说明任何内容 还有一件事 我在哪里可以获得领域驱动设计的单元测试示例 这有点宗教问题 有些人认为这没有问题 而另一些人可能认为这样做是异端邪说 虽
  • 事件侦听器完成后调用函数 - Javascript

    有没有办法在 Javascript 中调用函数EventListener已完成运行任何附加代码 我正在使用一个外部库EventListener 它在调用侦听器时执行特定操作 我需要在外部库的代码完成运行后运行我的函数 我要求一种EventL
  • Unity冷却时间实现

    我正在尝试在 Unity 项目中实现冷却时间 虽然这段代码似乎有意义 但它不起作用 发布的代码是一个全面的基本运动脚本 我尝试用 a 做某事cooldown time deltatime 但这似乎不起作用 我已经尝试了多种方法 但似乎没有一
  • Symfony 5.1.3 清除缓存时出现问题:尝试从命名空间加载类“MappingDriverChain”

    我已将 symfony 应用程序更新为5 1 3 但从那时起 在清除缓存时出现了类丢失异常 In App KernelDevDebugContainer php line 1050 Attempted to load class Mappi
  • 阻止 PostgreSQL 将值拆分为多行?

    我正在使用以下命令将二进制数据 bytea 数据类型转换为字符串encode foo bytea base64 但输出被分成多行 RECORD 1 req id 132675 b string d4IF4jCCBd4GCSqGSIb3DQE
  • “请求的模块'不提供名为'default'的导出”错误,但仅在相对导入中

    我从外部有这个 api 模块 当它作为 node module 安装时 使用 npm install 然后执行如下导入即可 import MyAPI from api 但是 当我查看 node modules 中的 api 文件夹并取出 a
  • 如何使用 Python 解码内存中的 JPEG XR 文件

    我正在使用 Python 3 处理显微镜生成的文件 该文件本质上是数千张 Jpeg XR 压缩图像的集合 我需要将它们全部读入内存 现在我正在以二进制模式读取数据 将它们保存在 jxr 文件中 并调用 JxrDecApp exe 将其转换为
  • 在生成的实体框架类上实现 INotifyPropertyChanged

    我有一个 SQL 数据库 并且正在实现一个 WPF UI 来更新它 如果我使用 EF5 从数据库生成类 如何在生成的类和属性上实现 INotifyPropertyChanged 以便我可以轻松地使用 UI 绑定到它们 有没有一种简单的方法可
  • Android布局设计原则[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在研究针对不同屏幕尺寸 屏幕密度和方向设计布局的最佳方法 但我越来越困惑 1 设计密度与屏幕尺寸我读过这个link https stack
  • Android MediaPlayer 重置冻结 UI

    我的安卓系统有问题MediaPlayer当改变dataSource玩家的 根据规范MediaPlayer http developer android com reference android media MediaPlayer html
  • 哪些 PHP 框架不使用前端控制器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C# WebBrowser 控件不应用 css

    我有一个项目 正在使用 VS2005 进行 我添加了一个 WebBrowser 控件 我向控件添加一个基本的空页面 private const string basicHtmlForm