编写 Internet Explorer 插件:使用浏览器帮助程序对象修改 DOM 时出现问题

发布于 10-05 21:21 字数 1123 浏览 8 评论 0原文

目前我正在用 C# 为 Internet Explorer 编写一个插件。 这是我第一次尝试使用 .net 和 Internet Explorer 插件。 与 Java 相比,C# 具有良好的语言特性。

然而,我被困住了。我找不到一种简单/或通用的方法来修改 DOM。

我的插件应该具有向站点显示 Html 标头的功能。

在 Javascript 中,我会做这样的事情:

var a = document.createElement('a');
var text_node = document.createTextNode(text);
var href = document.createAttribute("href");
href.nodeValue = url;
a.setAttributeNode(href);
a.appendChild(text_node); 
var my_dom = document.createElement('div');
my_dom.appendChild(a);
my_dom.style.background = '#36b';;
document.body.insertBefore(my_dom, document.body.firstChild);

我使用 www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx 上的教程来熟悉 BHO 和 Internet Explorer 开发。然而,在这个插件中,mshtml 包用于访问 dom。我找不到通过 api 向 dom 添加新元素的好方法。 在网上搜索时,我发现 System.Windows.Forms.HtmlDocument 有一个appendChild 函数。但是,当我将程序转换为 System.Windows.Forms 时,它根本不起作用。

有人可以告诉我一种如何修改(在正文开头插入 html 元素)dom 的方法吗?

这是我的程序框架的链接 https://gist.github.com/fd4459dc65acd7d167b6 首先,向我展示一种如何在 OnDocumentComplete 函数中将 an 添加到正文开头的方法就足够了。

谢谢

currently I am writing an Plugin for the Internet Explorer in C#.
It is my first try with .net and the Internet Explorer Plugin.
C# has nice language features in comparison to Java.

However, I am stuck. I can't find an easy/or a way in general to modify the DOM.

My Plugin should have a function to display a Html header to a site.

In Javascript I would do something like this:

var a = document.createElement('a');
var text_node = document.createTextNode(text);
var href = document.createAttribute("href");
href.nodeValue = url;
a.setAttributeNode(href);
a.appendChild(text_node); 
var my_dom = document.createElement('div');
my_dom.appendChild(a);
my_dom.style.background = '#36b';;
document.body.insertBefore(my_dom, document.body.firstChild);

I used the tutorial at www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx to get familiar with BHO and Internet Explorer Development. However in this plugin the package mshtml is used to access the dom. I can't find a good way through the api to add new elements to the dom.
While searching through the net I discovered that the System.Windows.Forms.HtmlDocument has a appendChild Function. However when I transform my program to System.Windows.Forms it does not work at all.

Can somebody show me a way how I can modify (insert at the beginning of the body an html element) the dom?

Here is a link to the skeleton of my programm https://gist.github.com/fd4459dc65acd7d167b6
For the beginning it is enough to show me a way how i can add an to the beginning of the body in the OnDocumentComplete function.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深海夜未眠2024-10-12 21:21:47

经过搜索和搜索我找到了解决方案。
我没有找到通过mshtml修改DOM的方法,而是通过javascript。
可以通过注入 Javascript

document.parentWindow.execScript("alert('hello world')");

我可以重用现有的 javascript 来解决这个问题。

After searching and searching I found a solution.
I did not find a way to modify the DOM via mshtml, but via javascript.
Javascript can be injected via

document.parentWindow.execScript("alert('hello world')");

I could reuse my existing javascripts to solve this issue.

野の2024-10-12 21:21:47

如果您有不止一行 Javascript 代码,您可以有多行 execScript。例子:

document.parentWindow.execScript("var trends_dom = document.createElement('div')");
document.parentWindow.execScript("var title_dom = document.createElement('strong')");
document.parentWindow.execScript("var text_dom = document.createTextNode('test')");
document.parentWindow.execScript("title_dom.innerText = 'This text is placed over a web page'");
document.parentWindow.execScript("trends_dom.appendChild(title_dom)");
document.parentWindow.execScript("trends_dom.appendChild(text_dom)");
document.parentWindow.execScript("trends_dom.style.background = '#36b'");
document.parentWindow.execScript("trends_dom.style.color = '#fff'");
document.parentWindow.execScript("trends_dom.style.padding = '10px'");
document.parentWindow.execScript("trends_dom.style.position = 'fixed'");
document.parentWindow.execScript("trends_dom.style.zIndex = '123456'");
document.parentWindow.execScript("trends_dom.style.top = '20px'");
document.parentWindow.execScript("trends_dom.style.font = '14px Arial'");
//document.body.appendChild(trends_dom);
document.parentWindow.execScript("document.body.insertBefore(trends_dom, document.body.firstChild)");

if you have more than one line of Javascript code, You can have multiple lines of execScript. Example:

document.parentWindow.execScript("var trends_dom = document.createElement('div')");
document.parentWindow.execScript("var title_dom = document.createElement('strong')");
document.parentWindow.execScript("var text_dom = document.createTextNode('test')");
document.parentWindow.execScript("title_dom.innerText = 'This text is placed over a web page'");
document.parentWindow.execScript("trends_dom.appendChild(title_dom)");
document.parentWindow.execScript("trends_dom.appendChild(text_dom)");
document.parentWindow.execScript("trends_dom.style.background = '#36b'");
document.parentWindow.execScript("trends_dom.style.color = '#fff'");
document.parentWindow.execScript("trends_dom.style.padding = '10px'");
document.parentWindow.execScript("trends_dom.style.position = 'fixed'");
document.parentWindow.execScript("trends_dom.style.zIndex = '123456'");
document.parentWindow.execScript("trends_dom.style.top = '20px'");
document.parentWindow.execScript("trends_dom.style.font = '14px Arial'");
//document.body.appendChild(trends_dom);
document.parentWindow.execScript("document.body.insertBefore(trends_dom, document.body.firstChild)");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文