我已经为IHTMLElement实例添加了一个回调,但是当为该事件调用IDispatch :: Invoke时,从来没有任何参数(即pDispParams-> cArgs和pDispParams-> cNamedArgs始终为0).例如,我为onmouseup事件添加了一个回调.据我所知,这个事件的回调应该接收一个MouseEvent对象.那是对的吗?如果是这样,我需要做些什么来确保这种情况发生?
这是在Windows XP SP2上使用MSHTML for IE 6 sp2(或更好).
我想做这样的事情:
<style type="text/css">
body {
font-family: dialog-font; /* Tahoma, Segoe UI or MS Sans Serif */
color: button-text;
background-color: button-face;
}
</style>
Run Code Online (Sandbox Code Playgroud)
是否有任何特定于Microsoft的CSS值提供此功能?
我正在维护一个基于WPF的应用程序,它包含一个基于WinForms的WebBrowser控件,该控件基于IE Web浏览器控件.当我们部署时,我们还必须提供Microsoft.mshtml.dll并为ClickOnce发布过程执行一些自定义配置,以便让事情发挥作用.
我很好奇,使用C#4.0中新的NoPIA和Type Equivalence功能以及动态类型功能,我们可以期望如果我们升级它,我们可以删除对Microsoft.mshtml.dll程序集的依赖吗?如果是这样,这不仅会减少我们部署的规模,而且还会简化我们的发布过程.
我的理解是,我们应该能够将通常自动生成的类型嵌入到COM类型的额外程序集中,例如Visual Studio的MapPoint控件.我不知道这是否也适用于Microsoft.mshtml.dll甚至是在最简单的情况下它是如何完成的.如果有人可以解释这些新功能对依赖COM互操作的项目的实际影响,特别是Microsoft.mshtml.dll程序集,那将对我有很大帮助.
我有以下代码,奇怪的是,它工作了几秒钟然后停止工作(我的事件处理程序方法停止被调用):
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
webBrowser1.Navigate("google.com");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (!webBrowser1.IsBusy && webBrowser1.Url == e.Url && webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
HTMLWindowEvents_Event windowEvents = webBrowser1.Document.Window.DomWindow as HTMLWindowEvents_Event;
windowEvents.onscroll += new HTMLWindowEvents_onscrollEventHandler(windowEvents_onscroll);
}
}
private void windowEvents_onscroll()
{
HtmlDocument htmlDoc = webBrowser1.Document;
int scrollTop = htmlDoc.GetElementsByTagName("HTML")[0].ScrollTop;
string text = scrollTop.ToString();
}
}
Run Code Online (Sandbox Code Playgroud) 我使用mshtml进行html解析.(版本7.0.3300.0,C:\ Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll).
HTMLDocumentClass有一个write方法,所以我使用它,但它引发了与ErrorCode的ComException:-2147352571和消息:类型不匹配.它是什么原因?如果不使用HTMLDocumentClass的write方法,他们为什么定义?
HTMLDocumentClass getHTMLDocument(string html)
{
HTMLDocumentClass doc = new HTMLDocumentClass();
doc.write(new object[] { html }); // raises exception
doc.close();
return doc;
}
HTMLDocumentClass getHTMLDocument2(string html)
{
HTMLDocumentClass doc = new HTMLDocumentClass();
IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
doc2.write(new object[] { html });
doc2.close();
return doc;
}
Run Code Online (Sandbox Code Playgroud) 我想在 VBScript 中使用 MSHTML 将字符串加载为 html 文件并解析它。我可以使用“InternetExplorer.application”执行此操作,但我想使用“htmlfile”(MSHTML.HTMLDocument)执行此操作
下面的代码:
Set h = CreateObject("htmlfile")
h.body.innerHTML = "html goes here"
Run Code Online (Sandbox Code Playgroud)
给出这个错误:
Microsoft VBScript 运行时错误:需要对象:“body”
如何加载 html 字符串?
我想使用MSHTML库来解析我在字符串变量中的一些HTML.但是,我无法弄清楚如何做到这一点.我可以轻松地解析给定已知URL的网页内容,但不能直接解析源HTML.这可能吗?如果是这样,怎么样?
Public Sub ParseHTML(sHTML As String)
Dim oHTML As New HTMLDocument, oDoc As HTMLDocument
'This works:'
Set oDoc = oHTML.createDocumentFromUrl("http://www.google.com", "")
'I would like to do the following but no such method actually exists:'
Set oDoc = oHTML.createDocumentFromString(sHTML)
....
'Parse the HTML using the oDoc variable'
....
Run Code Online (Sandbox Code Playgroud) 我有一个 C# BHO,它在文档中调用一些 JS 函数。通常我是这样做的(并且一切正常):
IHTMLWindow2 wnd;
//...
wnd.execScript("testMethod(\"testData\");");
Run Code Online (Sandbox Code Playgroud)
但是现在我需要将 JS 方法的值返回给我的 BHO。我实现了测试 JS 方法,它返回一个字符串,但是当我使用 execScript 时没有返回任何内容。我开始阅读有关 execScript 方法的文档,发现现在他们建议使用eval代替。
但是我找不到任何关于如何从我的 C# BHO 调用它的信息。我发现了这个问题,甚至还有 c# 示例,但它假定我托管 WebBrowser 控件并建议使用 Document.InvokeScript。在 MSHTML 中,所有 IHTMLDocument* 接口都没有 InvokeScript 方法。我错过了什么吗?
编辑 1:这是一个问题,哪种类型的答案如何从 execScript 获取返回值。但是,如果 MSDN 表示不再支持它,那么使用 execScript 可能并不明智。
编辑 2: 此问题的更多代码。首先,我有一个这样的 JS 函数(在一个名为 func.js 的文件中):
getElemHtml = function () {
var myElem = document.getElementsByClassName("lineDiv")[0];
// A lot more code goes here...
alert(myElem.innerHTML);
return myElem.innerHTML;
}
Run Code Online (Sandbox Code Playgroud)
然后在我的 BHO …
早在 2021 年 5 月 19 日,我就最近(21 年 4 月至 5 月)对与延迟绑定引用相关的接口的可疑更改写了此问答mshtml.dll。如果您愿意,这是第 2 部分。
以前,在诸如this和this 之类的问题中,我曾指出缺乏对各种 CSS 选择器的支持mshtml.dll,尤其是关于伪类。在上述问题中,我强调了这一点nth-child(),nth-of-type()但并未针对MSHTML.
通常情况下,这表现在这里,不支持选择语法可以导致:
运行时错误“-2140143604 (8070000c)”:由于错误 8070000c,无法完成操作。
我希望有些事情会因为不再支持相关的各种版本/平台而中断Internet Explorer (IE)(这MSHTML与 - 请参阅我的this。我没想到的是最近对支持的 CSS 选择器的改进。以以下示例为例:
Option Explicit
''Required references:
'' Microsoft HTML Object Library
Public Sub CssTest()
Const URL = "https://books.toscrape.com/"
Dim html As MSHTML.HTMLDocument
Set html = New MSHTML.HTMLDocument …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些其他HTML附带的CSS注入到C#托管的WebBrowser控件中.我试图通过底层的MSHTML(DomDocument属性)控件来执行此操作,因为此代码用作完整IE8 BHO的各种类型的原型.
问题是,虽然我可以注入HTML(通过mydomdocument.body.insertAdjacentHTML)和Javascript(通过mydomdocument.parentWindow.execScript),但它完全拒绝我的CSS代码.
如果我在注入后将包含我要插入的HTML的字符串与目标页面源进行比较,那么MSHTML的源将包含除<style>元素及其基础源之外的所有内容.
CSS通过了CSS 2.1的W3C验证.它没有做任何太棘手的事情,除了一些背景图像属性将图像直接嵌入到CSS中(例如background-image: url("data:image/png;base64......),并且注释掉这些行并不会改变结果.
更奇怪的是(而且我不确定这是否相关),是我上周没有遇到任何问题.本周我又回到了它,在切换了一些在实际注入之前处理要注入的HTML的代码之后,它不再起作用了.当然,我认为我的某个更改可能会出现问题,但在对所有逻辑进行评论并将其直接输入后,HTML仍然显示为未格式化.
目前我正在注入<body>标签,虽然我已经尝试注入<head>并且遇到了类似的结果.
在此先感谢您的帮助!
汤姆