标签: mshtml

没有在IHTMLElement事件处理程序中获取事件参数

我已经为IHTMLElement实例添加了一个回调,但是当为该事件调用IDispatch :: Invoke时,从来没有任何参数(即pDispParams-> cArgs和pDispParams-> cNamedArgs始终为0).例如,我为onmouseup事件添加了一个回调.据我所知,这个事件的回调应该接收一个MouseEvent对象.那是对的吗?如果是这样,我需要做些什么来确保这种情况发生?

这是在Windows XP SP2上使用MSHTML for IE 6 sp2(或更好).

c++ com internet-explorer mshtml

4
推荐指数
1
解决办法
1664
查看次数

有没有办法从HTML,CSS或MSHTML接口引用Internet Explorer中的系统字体和颜色?

我想做这样的事情:

<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值提供此功能?

html css internet-explorer mshtml

4
推荐指数
1
解决办法
225
查看次数

在C#/ .NET 4.0中新的NoPIA和Type Equivalence功能是否意味着不再需要Microsoft.mshtml.dll

我正在维护一个基于WPF的应用程序,它包含一个基于WinForms的WebBrowser控件,该控件基于IE Web浏览器控件.当我们部署时,我们还必须提供Microsoft.mshtml.dll并为ClickOnce发布过程执行一些自定义配置,以便让事情发挥作用.

我很好奇,使用C#4.0中新的NoPIAType Equivalence功能以及动态类型功能,我们可以期望如果我们升级它,我们可以删除对Microsoft.mshtml.dll程序集的依赖吗?如果是这样,这不仅会减少我们部署的规模,而且还会简化我们的发布过程.

我的理解是,我们应该能够将通常自动生成的类型嵌入到COM类型的额外程序集中,例如Visual Studio的MapPoint控件.我不知道这是否也适用于Microsoft.mshtml.dll甚至是在最简单的情况下它是如何完成的.如果有人可以解释这些新功能对依赖COM互操作的项目的实际影响,特别是Microsoft.mshtml.dll程序集,那将对我有很大帮助.

c# mshtml com-interop .net-4.0

4
推荐指数
1
解决办法
2448
查看次数

检测WebBrowser控件上的滚动

我有以下代码,奇怪的是,它工作了几秒钟然后停止工作(我的事件处理程序方法停止被调用):

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)

.net c# mshtml webbrowser-control winforms

4
推荐指数
1
解决办法
3904
查看次数

.net文件用mshtml写

我使用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)

.net c# document mshtml

4
推荐指数
1
解决办法
4930
查看次数

在 VBScript 中使用 MSHTML 解析 html 文件

我想在 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 字符串?

html vbscript activex runtime-error mshtml

4
推荐指数
1
解决办法
7811
查看次数

MSHTML:CreateDocumentFromString而不是CreateDocumentFromUrl

我想使用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)

vb6 vba mshtml html-parsing

4
推荐指数
1
解决办法
2万
查看次数

C# BHO 从 Javascript 返回值

我有一个 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 …

javascript c# internet-explorer bho mshtml

4
推荐指数
1
解决办法
1565
查看次数

VBA 目前支持哪些 CSS 选择器?

早在 2021 年 5 月 19 日,我就最近(21 年 4 月至 5 月)对与延迟绑定引用相关的接口的可疑更改写了问答mshtml.dll。如果您愿意,这是第 2 部分。

以前,在诸如thisthis 之类的问题中,我曾指出缺乏对各种 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)

vba mshtml css-selectors queryselector

4
推荐指数
1
解决办法
70
查看次数

C#:将CSS注入MSHTML实例的最佳方法是什么?

我正在尝试将一些其他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>并且遇到了类似的结果.

在此先感谢您的帮助!

汤姆

c# browser mshtml code-injection internet-explorer-8

3
推荐指数
1
解决办法
7097
查看次数