我正在尝试在Internet Explorer扩展中生成合成Javascript事件,并且我无法获取fromElement属性.这是我的代码的摘录:
MsHtml.IHTMLDocument4 doc4 = ... // the document object
Object o = null;
MsHtml.IHTMLEventObj2 eObj =
(MsHtml.IHTMLEventObj2)doc4.CreateEventObject(ref o);
// string that specifies the from element, e.g. "document.getElementById('id1')":
string locator = ...
object from = doc4.Script.GetType().InvokeMember("eval",
BindingFlags.InvokeMethod,
null,
doc4.Script,
new object[] { locator });
// from now holds a ref to an object that implements the IHTMLElement interface
eObj.fromElement = from;
IHTMLElement el = eObj.fromElement;
// el == null
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?eObj.fromElement应该等于from,但它似乎没有设置.
我有一个使用Smith Html编辑器的C#解决方案(我正在开发使用它的主项目,所以我对这个库不太了解),它引用了MSHTML.这工作正常,直到我升级到Windows 10,它再也找不到MSHTML了.我可以直接引用GAC文件夹上的DLL,它会停止抱怨并因此构建,但是它会得到一些与编辑器无法实例化相关的运行时错误.
经过一番研究后发现MSHTML已逐步退出Windows 10,因为它现在使用的是EdgeHTML.有谁知道我怎么能绕过这个?
该解决方案仍适用于Windows 7.
我有一个.NET 2.0 WebBrowser控件,用于导航一些没有用户交互的页面(不要问......长篇故事).由于此应用程序的用户性质较少,我已将WebBrowser控件的ScriptErrorsSuppressed属性设置为true,VS 2005状态中包含的文档将"隐藏其源自底层ActiveX控件的所有对话框,不只是脚本错误." 但是,MSDN文章没有提到这一点.我已经设法取消了NewWindow事件,这会阻止弹出窗口,因此需要处理.
任何人都有使用其中一个并成功阻止所有对话框,脚本错误等的经验?
编辑
这不是IE的独立实例,而是生成在Windows窗体应用程序上的WebBrowser控件的实例.任何人都有使用此控件或底层AxSHDocVW的经验吗?
再次编辑
对不起,我忘了提这个...我试图阻止一个JavaScript警报(),只需一个OK按钮.也许我可以转换成IHTMLDocument2对象并以这种方式访问脚本,我已经使用过MSHTML了,有人都知道吗?
我制作了一个WPF/C#程序,我使用互联网控件进行所见即所得的HTML编辑.
它是一个常规的可执行程序.
它适用于大多数计算机,但有些计算机给我以下错误.
无法加载文件或程序集'Microsoft.mshtml,Version = 7.0.3300.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.强名称验证失败.
"Microsoft.mshtml.dll"文件随程序一起分发.它与exe文件位于同一文件夹中的所有其他必需的dll.
这是输出 Fuslogvw
*** Assembly Binder Log Entry (1/14/2010 @ 6:36:51 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Documents and Settings\office\Desktop\Database\DATABASE.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = CAMPUSREMOTE\office
LOG: DisplayName = Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/office/Desktop/Database/
LOG: Initial …Run Code Online (Sandbox Code Playgroud) 我有ac#app,我尝试过使用一些mshtml元素.但我有一个问题.该using mshtml;命名空间给了我一个错误的Visual Studio 2012.
这是我的源代码,
namespace Tagger
{
using mshtml;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
public class HTMLForm
{
private string _action = "";
private string _method = "";
public Hashtable Inputs = new Hashtable();
public HTMLForm(IHTMLFormElement element)
{
this._method = element.method;
this._action = element.action;
foreach (IHTMLInputElement element2 in (IHTMLElementCollection) element.tags("input"))
{
try
{
string name = element2.name;
string str2 = element2.value;
if (name == null)
{
name = element2.type;
}
this.Inputs.Add(name, str2); …Run Code Online (Sandbox Code Playgroud) 有没有办法在不使用任何Web浏览器控件的情况下在画布上绘制特定的HTML元素内容?
使用此代码,我将元素呈现给窗体的画布(仅作为示例).
它虽然有效,但这段代码不是一个好习惯 - 见下文,为什么......
uses
SHDocVw, MSHTML;
procedure TForm1.Button1Click(Sender: TObject);
var
WebBrowser: TWebBrowser;
HTMLElement: IHTMLElement;
HTMLRenderer: IHTMLElementRender;
begin
WebBrowser := TWebBrowser.Create(nil);
try
WebBrowser.ParentWindow := Application.Handle;
WebBrowser.Navigate('https://stackoverflow.com/questions/2975586/good-delphi-blogs');
while WebBrowser.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
HTMLElement := (WebBrowser.Document as IHTMLDocument3).getElementById('question');
HTMLRenderer := (HTMLElement as IHTMLElementRender);
HTMLRenderer.DrawToDC(Canvas.Handle);
finally
HTMLElement := nil;
HTMLRenderer := nil;
WebBrowser.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为
有没有一种干净的方法来解决这个使用MSHTML?
我正在使用.NET WebBrowser控件.我怎么知道网页何时满载?
我想知道浏览器什么时候不提取任何数据.(当IE在状态栏中写'完成'时......).
笔记:
A有一个Web浏览器嵌入在我的Win32 C++应用程序的对话框中(没有MFC,ATL等),我最初从包含一些HTML代码的字符串设置文档的内容.此HTML正确呈现.当"文档完成"事件发生时,我操纵DOM,例如通过将文本节点附加到BODY元素.
问题是虽然调用IHTMLElement::get_outerHTMLBODY元素的界面表明文本节点存在,但浏览器内容在对话框中显示不变.
我试过调用两个IWebBrowser2::Refresh和::InvalidateRect/ ::UpdateWindow,但都没有帮助.
有任何想法吗?如果需要,我可以发布部分代码.
还有,有谁知道
IWebBrowser2::RefreshHTML文档是从字符串加载而不是URL加载时是否有意义仍希望得到这个答案......任何人?
我在MSDN中看到了很多关于如何在VS中使用MSHTML的例子.有谁知道我们是否以及如何使用MSHTML和VBA来打开网页?
谢谢.
接口名称末尾的数字是什么意思?我看到IHTMLDocument3-7没有成员(参见#5的示例),并且8有与手势相关的成员.该数字是从Windows版本派生的吗?