如何在WebBrowser控件中注入CSS?

2023-12-27

据我所知,有一种方法可以将 javascript 注入到 DOM 中。下面是使用 javascript 注入的示例代码webbrowser控制:

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function sayHello() { alert('hello') }";
head.AppendChild(scriptEl);
webBrowser1.Document.InvokeScript("sayHello");

有没有更简单的方法将 css 注入到 DOM 中?


我自己没有尝试过,但是由于 CSS 样式规则可以使用以下命令包含在文档中<style>标签如下:

<html>
<head>
<style type="text/css">
    h1 {color:red}
    p {color:blue}
</style>
</head>

你可以尝试给予:

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement styleEl = webBrowser1.Document.CreateElement("style");
IHTMLStyleElement element = (IHTMLStyleElement)styleEl.DomElement;
IHTMLStyleSheetElement styleSheet = element.styleSheet;
styleSheet.cssText = @"h1 { color: red }";
head.AppendChild(styleEl);

走吧。您可以在 HTMLStyleElement 上找到更多信息here http://msdn.microsoft.com/en-us/library/aa768673(v=vs.85).aspx.

Edit

看来答案比我最初想象的要简单得多:

  using mshtml;

  IHTMLDocument2 doc = (webBrowser1.Document.DomDocument) as IHTMLDocument2;
  // The first parameter is the url, the second is the index of the added style sheet.
  IHTMLStyleSheet ss = doc.createStyleSheet("", 0);

  // Now that you have the style sheet you have a few options:
  // 1. You can just set the content as text.
  ss.cssText = @"h1 { color: blue; }";
  // 2. You can add/remove style rules.
  int index = ss.addRule("h1", "color: red;");
  ss.removeRule(index);
  // You can even walk over the rules using "ss.rules" and modify them.

我编写了一个小测试项目来验证它是否有效。我通过在 MSDN 上搜索 IHTMLStyleSheet 得到了最终结果,偶然发现这一页 http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/49dc2c07-ea26-4734-aa2c-99a109ccb46a, 这一页 http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/f18898b2-9313-4327-a4d9-6104831bfd69/ and this one http://social.msdn.microsoft.com/forums/en-US/iewebdevelopment/thread/33fd33f7-e857-4f6f-978e-fd486eba7174/.

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

如何在WebBrowser控件中注入CSS? 的相关文章

  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • 有没有更好的方法来获取每个项目与谓词匹配的子序列?

    假设我有一个 IEnumerable 例如 2 1 42 0 9 6 5 3 8 我需要获得与谓词匹配的项目的 运行 例如 如果我的谓词是 bool isSmallerThanSix int number 我想得到以下输出 2 1 0 5
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • 意外的 Chrome 自动填充行为 [禁用 chrome 自动填充]

    因此 像我之前的其他人一样 我正在尝试禁用 chrome 自动填充 这向我解释了为什么自动完成关闭不起作用 https www w3 org TR html5 forms html autofilling form controls the
  • 是否可以将“获取令牌”和“获取用户信息”步骤合并为一?

    在授权代码流程中 客户端通常会得到id token and 访问令牌一步 然后通过访问令牌到 userinfo 端点以在第二步中获取实际数据 就 OpenID Connect 而言 是否可以将这些步骤合并为一个 这样从客户端到 OpenID
  • 如何在悬停某物时连续单击?

    我很确定这有一个简单的解决方案 我正在使用 jCarousellite 我想更改内置导航按钮的行为以在悬停时触发 carousel jCarouselLite vertical true btnNext btn down btnPrev b
  • 在 Dart/Flutter 中解析巨大的 (3Gb) XML

    我有一个网站 我从该网站收到一个巨大的 XML 文件 我需要在 Dart 中将其解析为 2 个类 XML 部分
  • 使用 pecl 在 osx 上安装 phpredis

    我安装时遇到一些问题phpredis在我的 Mac OS X Mavericks 上 我有redis server安装并运行 我用了sudo pecl install redis安装 phpredis 现在 当我这样做时 出现了以下情况 r
  • 如何将整数保存到 NSUserDefaults 中?

    有谁知道我将如何将我的高分整数保存到 NSUserDefaults 以便稍后加载它 NSUserDefaults standardUserDefaults setInteger HighScore forKey HighScore 把它找回
  • 发送和接收短信

    我正在寻找如何使用自己的应用程序接收和发送短信的信息 我不知道我应该使用什么设备 什么编程语言有合适的API等等 您可能想调查一下Twilio http www twilio com 他们提供发送和接收短信的服务
  • Kivy:如何使小部件表现得像溢出:隐藏

    我想在 Kivy 中创建 GridLayout 其中包含许多矩形按钮以及一些不同大小的自定义图像 为此 我想要缩放图像 我想要执行此操作的方式如下所示 然后裁剪 隐藏溢出小部件边框的部分 调整大小效果很好 但我不知道如何隐藏 裁剪矩形之外的
  • 条件/三元运算符如何工作? C++ [重复]

    这个问题在这里已经有答案了 以下代码的直译是什么 另外 请解释它的含义以及使用该运算符的不同方法 int i 1 j 2 cout lt lt i gt j i j lt lt is greater lt lt endl 有关三元运算符的任
  • 机器的.net核心cpu使用率

    我最近从 c 迁移到 net core 在 C 中 我使用以下方法获取 CPU 使用情况 PerformanceCounter cpuCounter PerformanceCounter ramCounter cpuCounter new
  • 全新安装后,Stenciljs 从 @types/babel__traverse 包抛出构建错误

    So for context I have just installed stencil And was wanting to mess around with it I m using latest version from the do
  • Quill JS - 检查表单提交上的文本是否更改

    我正在使用 Quill 富文本 需要找到一种方法来检查页面提交表单时文本是否已更改 我对使用 Quill 还很陌生 并且一直在查看事件here https quilljs com docs api events html 每次文本更改时 显
  • 循环遍历数组的数组

    我有一个数组的数组 比如图形 如何迭代所有数组 var parentArray 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 它只是一个示例数
  • Django:部署服务器上未显示静态文件

    我无法让我的网站正确加载静态文件 关于静态文件的settings py文件如下 Static files STATIC URL static STATIC ROOT var www str8red com static STATICFILE
  • 有资质的生产者消费者

    我是 clojure 的新手 正在尝试了解如何正确使用其并发功能 因此任何批评 建议都会受到赞赏 所以我尝试在 clojure 中编写一个小型测试程序 其工作原理如下 有 5 个生产者和 2 个消费者 生产者等待一段随机时间 然后将一个数字
  • 克服空数组的 ValueError

    In 这次讨论 https stackoverflow com questions 22853118 twiny in matplotlib changes the y axis scale 22856984 noredirect 1 co
  • 如何删除cllocation的缓存?

    我正在开发一个 iPhone 应用程序 它是一个位置感知应用程序 目前 除了先前位置的缓存之外 该应用程序运行良好 第一次启动应用程序位置管理器会获取当前位置 然后根据当前位置显示附近的事物 但从下一个开始 它会使用之前获取的位置 直到我重
  • 在 php 中解析 mIRC 颜色

    我想转换mirc 颜色代码 http www mirc com help colors html通过 php 转换为 html 这是示例 http searchirc com search php F exact T chan N 6246
  • Javascript异步执行:回调会中断正在运行的代码吗?

    我只是希望有人能为我澄清这一点 如果我使用 Node js 在服务器端运行以下代码 不在浏览器中 console log a db get select from table1 function result console log b c
  • 如何在WebBrowser控件中注入CSS?

    据我所知 有一种方法可以将 javascript 注入到 DOM 中 下面是使用 javascript 注入的示例代码webbrowser控制 HtmlElement head webBrowser1 Document GetElement