在问题#56107的回答中,Erlend提供了这个示例c#代码:
using mshtml;
...
object[] oPageText = { html };
HTMLDocument doc = new HTMLDocumentClass();
IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
doc2.write(oPageText);
Run Code Online (Sandbox Code Playgroud)
我想在VB.NET中使用mshtml,但IDE无法识别:
Imports mshtml
Run Code Online (Sandbox Code Playgroud)
在VB.NET中使用MSHTML需要采取哪些额外步骤?
我想学习一些关于MSHTML的基础知识,比如如何使用IHtmlDocument和IHtmlDocument2接口.我搜索了很长一段时间,但找不到初学者的教程.有人可以推荐一些东西吗?
编辑:我更喜欢使用C#.
MSDN文档addEventListener说它接受一个IDispatch *对象形式的回调函数.从C#(我正在使用COM互操作),Visual Studio将参数类型显示为just object.
我找了一个IEventListener类似的接口或类似但没有找到一个.我应该传递什么?
尝试检测是否在MSHTML中添加或删除了DOM中的新元素.会有这样的事件发生吗?
http://msdn.microsoft.com/en-us/library/aa741877(v=VS.85).aspx
在IE9中有IDOMMutationEvent :: initMutationEvent
http://msdn.microsoft.com/en-us/library/ff975905(v=vs.85).aspx
我认为没有明确的答案,所以你如何处理调试这个问题?:
我的主要应用程序(MicroStation插件)使用SHDocVw.InternetExplorer COM包装器启动IE,与其交互,在未使用时隐藏它(例如,当用户关闭窗口并将InternetExplorer.Visible设置为false时拦截).
当主应用程序关闭时,插件通过调用InternetExplorer.Quit来关闭IE,但是iexplore进程仍在运行(在主应用程序关闭时IE被隐藏).
我尝试过的:
有趣的是,我无法重现在同一主应用程序(MicroStation插件)中调用Quit的问题,但主应用程序正在运行时,而不是在退出事件处理代码中.当在其他地方调用时,Quit按预期关闭IE.
否则,InternetExplorer对象对我来说是不透明的.
还有其他方法可以调试此问题吗?
编辑:可能值得注意的是,主应用程序创建UserControl并使IE窗口成为此UserControl的子窗口(使用SetWindowLong更改GWL_STYLE以允许窗口为子窗口,使用SetParent将UserControl设置为父窗口).但是当IE被隐藏时(就在Quit尝试失败时),父窗口被设置为0.
谢谢!
伙计们:我在object-pascal编程中遇到了"如何获得由几个IHTMLElements组成的IHTMLElementCollection obj"的问题,我的代码如下:
function TExDomUtils.GetElementsByClassName(vDoc:IHTMLDocument3; strClassName:string):IHTMLElementCollection;
var
vElementsAll : IHTMLElementCollection;
vElementsRet : IHTMLElementCollection;
vElement : IHTMLElement;
docTmp : IHTMLDocument2;
I ,J: Integer;
begin
J := 0;
vElementsAll := vDoc.getElementsByTagName('*');
for I:=0 to vElementsAll.length - 1 do
begin
vElement := vElementsAll.item(I,0) as IHTMLElement;
if vElement.getAttribute('class',0) = strClassName then
begin
// how to get an IHTMLElementCollection obj which composed of several IHTMLElements?
J := J + 1;
end;
end;
Result := vElementsRet;
end;
Run Code Online (Sandbox Code Playgroud) 我在设计模式下使用webbrowser-control(MSHTML Edit).当我尝试为所选文本插入超链接时,它可以正常工作.但是当我尝试为所选图片插入超链接时,我收到了错误:
Error 100
Function expected
Run Code Online (Sandbox Code Playgroud)
码:
var
pCmd : OleVariant;
begin
html_doc.execCommand('CreateLink', True, pCmd);
end;
Run Code Online (Sandbox Code Playgroud)
如何以另一种方式在图片中插入超链接,与使用execCommand不同?
我WebBrowser在WPF窗口中加载了一个.我需要获取加载的网页标题WebBrowser.
我使用了文档
object doc = this._browser.Document;我可以看到它是一个mshtml.MSHTMLDocument,我想把它作为这种类型,以便我可以拉出标题,但我在任何.NET库中都找不到这种类型.
我是否必须自己创建该类型,或者我只是在错误的地方寻找/接近这种错误的方式?
如何从System.Windows.Controls.WebBrowser文档中提取页面标题?
当我尝试解析HTMLTableCell该innerText值是不正确的,似乎我得到的是类名而不是文本.
现在奇怪的是,当我在调试中查看单元格(在VS2010中)时,我看到正确的值我做错了什么?
进一步的研究提出了这个问题,当我查看VS2010中的值时,看起来这个 cell.innerText是"中心时间"和((mshtml.HTMLTableCellClass)(单元格)).innerText是"23:45".问题是,当我转换为mshtml.HTMLTableCellClass时它不会编译,所以我必须使用接口(为什么会这样?)
见下面的代码:
mshtml.HTMLDocument doc = MainBrowser.Document as mshtml.HTMLDocument;
if (doc != null)
{
mshtml.HTMLTable table = doc.getElementById("ecEventsTable") as mshtml.HTMLTable;
List<List<string>> textRows = new List<List<string>>();
foreach (mshtml.HTMLTableRow row in table.rows)
{
if (row != null && row.id != null && row.id.Contains("eventRowId"))
{
List<string> temp = new List<string>();
foreach (mshtml.HTMLTableCell cell in row.cells)
{
string text = cell.innerText;
if (text != null && text != "" && text …Run Code Online (Sandbox Code Playgroud) 我试图在 Javascript 和我的TWebBrowser. 在我的第一次迭代中,我能够注册属性更改事件,以便当标记更改时,Delphi 会获取更改,然后读取触发更改的标记的值。这样我们就可以让 Javascript 设置一个隐藏标签,Delphi 将接收更改,然后 Delphi 将读取隐藏标签以获取值。这工作正常,但感觉有点hacky。
在第二次迭代中,我尝试触发 Javascript 中引发的自定义事件。我能够使其正常工作,但我找不到一种方法来获取传递给自定义事件的参数。这是我创建的代码IDispatch:
constructor TWebBrowserEvent.Create(const OnEvent: TCallback);
begin
inherited Create;
FOnEvent := OnEvent;
end;
function TWebBrowserEvent.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
Result := E_NOTIMPL;
end;
function TWebBrowserEvent.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
Result := E_NOTIMPL;
end;
function TWebBrowserEvent.GetTypeInfoCount(out Count: Integer): HResult;
begin
Result := E_NOTIMPL;
end;
function TWebBrowserEvent.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, …Run Code Online (Sandbox Code Playgroud) mshtml ×10
c# ×3
delphi ×3
html ×2
.net ×1
browser ×1
debugging ×1
delphi-2010 ×1
execcommand ×1
hyperlink ×1
innertext ×1
iwebbrowser2 ×1
pascal ×1
quit ×1
twebbrowser ×1
vb.net ×1
wpf ×1