- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 System.Windows.Forms.WebBrowser 控件来访问 URL。某些 URL 会触发在 IE 中而不是在 WebBrowser 中打开的弹出窗口。我不太在乎他们在哪里开门。但以某种方式找出弹出窗口的 URL 是最重要的目标。我一直在网络上看到对“NewWindow2”事件的引用。我不确定它有多相关,但我不知道如何使用它/在哪里可以找到它,因为 WebBrowser 没有 NewWindow2 事件,只有 NewWindow 事件。
有什么想法吗?
谢谢!
编辑
Web_V1.NewWindow 事件仅在一定程度上起作用。并非所有弹出窗口都被检测到。有些 URL 只显示为“about:blank”。前任。在 http://www.thedailybeast.com/ 上使用它. (有人知道任何其他网站的弹出窗口数量臭名昭著吗?)
有人知道检测 WebBrowser 弹出窗口结果页面的万能方法吗?
最佳答案
一个好的弹出测试器是 http://www.popuptest.com .
WebBrowser
NewWindow 事件实际上 Hook 在基础 NewWindow2
事件上。 NewWindow 工作正常,但它不会为您提供新窗口所在的 url。
从 IE6 开始,有一个 NewWindow3可用,但是 WebBrowser 不公开这个。但是,这里有一个示例代码,展示了如何使用它。在 NewWindow3
事件处理程序中,您将看到所有弹出窗口和相应的 url。
// test code
private void button1_Click(object sender, EventArgs e)
{
_events = new WebBrowserEvents(_wb); // register event sink, make sure ActiveXInsance is not null here
_wb.Navigate("http://www.popuptest.com/");
}
// this event sink declares the NewWindow3 event
public class WebBrowserEvents : StandardOleMarshalObject, DWebBrowserEvents2, IDisposable
{
private AxHost.ConnectionPointCookie _cookie;
public WebBrowserEvents(WebBrowser wb)
{
_cookie = new AxHost.ConnectionPointCookie(wb.ActiveXInstance, this, typeof(DWebBrowserEvents2));
}
void DWebBrowserEvents2.StatusTextChange(string text)
{
Trace.WriteLine("StatusTextChange text:" + text);
}
void DWebBrowserEvents2.ProgressChange(int progress, int progressMax)
{
Trace.WriteLine("ProgressChange progress:" + progress + " progress:" + progressMax);
}
void DWebBrowserEvents2.CommandStateChange(int command, bool enable)
{
Trace.WriteLine("CommandStateChange command:" + command + " enable:" + enable);
}
void DWebBrowserEvents2.DownloadBegin()
{
Trace.WriteLine("DownloadBegin");
}
void DWebBrowserEvents2.DownloadComplete()
{
Trace.WriteLine("DownloadComplete");
}
void DWebBrowserEvents2.TitleChange(string text)
{
Trace.WriteLine("TitleChange text:" + text);
}
void DWebBrowserEvents2.PropertyChange(string szProperty)
{
Trace.WriteLine("PropertyChange szProperty:" + szProperty);
}
void DWebBrowserEvents2.BeforeNavigate2(object pDisp, ref object URL, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel)
{
Trace.WriteLine("BeforeNavigate2 URL:" + URL);
}
void DWebBrowserEvents2.NewWindow2(ref object pDisp, ref bool cancel)
{
Trace.WriteLine("NewWindow2");
}
void DWebBrowserEvents2.NavigateComplete2(object pDisp, ref object URL)
{
Trace.WriteLine("NavigateComplete2 URL:" + URL);
}
void DWebBrowserEvents2.DocumentComplete(object pDisp, ref object URL)
{
Trace.WriteLine("DocumentComplete URL:" + URL);
}
void DWebBrowserEvents2.OnQuit()
{
Trace.WriteLine("OnQuit");
}
void DWebBrowserEvents2.OnVisible(bool visible)
{
Trace.WriteLine("OnVisible visible:" + visible);
}
void DWebBrowserEvents2.OnToolBar(bool toolBar)
{
Trace.WriteLine("OnToolBar toolBar:" + toolBar);
}
void DWebBrowserEvents2.OnMenuBar(bool menuBar)
{
Trace.WriteLine("OnMenuBar menuBar:" + menuBar);
}
void DWebBrowserEvents2.OnStatusBar(bool statusBar)
{
Trace.WriteLine("OnStatusBar statusBar:" + statusBar);
}
void DWebBrowserEvents2.OnFullScreen(bool fullScreen)
{
Trace.WriteLine("OnFullScreen fullScreen:" + fullScreen);
}
void DWebBrowserEvents2.OnTheaterMode(bool theaterMode)
{
Trace.WriteLine("OnTheaterMode theaterMode:" + theaterMode);
}
void DWebBrowserEvents2.WindowSetResizable(bool resizable)
{
Trace.WriteLine("WindowSetResizable resizable:" + resizable);
}
void DWebBrowserEvents2.WindowSetLeft(int left)
{
Trace.WriteLine("WindowSetLeft left:" + left);
}
void DWebBrowserEvents2.WindowSetTop(int top)
{
Trace.WriteLine("WindowSetTop top:" + top);
}
void DWebBrowserEvents2.WindowSetWidth(int width)
{
Trace.WriteLine("WindowSetWidth width:" + width);
}
void DWebBrowserEvents2.WindowSetHeight(int height)
{
Trace.WriteLine("WindowSetHeight height:" + height);
}
void DWebBrowserEvents2.WindowClosing(bool isChildWindow, ref bool cancel)
{
Trace.WriteLine("WindowClosing isChildWindow:" + isChildWindow);
}
void DWebBrowserEvents2.ClientToHostWindow(ref int cx, ref int cy)
{
Trace.WriteLine("ClientToHostWindow cx:" + cx + " cy:" + cy);
}
void DWebBrowserEvents2.SetSecureLockIcon(int secureLockIcon)
{
Trace.WriteLine("SetSecureLockIcon secureLockIcon:" + secureLockIcon);
}
void DWebBrowserEvents2.FileDownload(ref bool cancel)
{
Trace.WriteLine("FileDownload");
}
void DWebBrowserEvents2.NavigateError(object pDisp, ref object URL, ref object frame, ref object statusCode, ref bool cancel)
{
Trace.WriteLine("NavigateError url:" + URL);
}
void DWebBrowserEvents2.PrintTemplateInstantiation(object pDisp)
{
Trace.WriteLine("PrintTemplateInstantiation");
}
void DWebBrowserEvents2.PrintTemplateTeardown(object pDisp)
{
Trace.WriteLine("PrintTemplateTeardown");
}
void DWebBrowserEvents2.UpdatePageStatus(object pDisp, ref object nPage, ref object fDone)
{
Trace.WriteLine("UpdatePageStatus");
}
void DWebBrowserEvents2.PrivacyImpactedStateChange(bool bImpacted)
{
Trace.WriteLine("PrivacyImpactedStateChange bImpacted:" + bImpacted);
}
void DWebBrowserEvents2.NewWindow3(ref object pDisp, ref bool cancel, int dwFlags, ref object bstrUrlContext, ref object bstrUrl)
{
Trace.WriteLine("NewWindow3 bstrUrlContext:" + bstrUrlContext + " bstrUrl:" + bstrUrl);
}
public void Dispose()
{
if (_cookie != null)
{
_cookie.Disconnect();
_cookie = null;
}
}
}
[ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
internal interface DWebBrowserEvents2
{
[DispId(0x66)]
void StatusTextChange([In] string text);
[DispId(0x6c)]
void ProgressChange([In] int progress, [In] int progressMax);
[DispId(0x69)]
void CommandStateChange([In] int command, [In] bool enable);
[DispId(0x6a)]
void DownloadBegin();
[DispId(0x68)]
void DownloadComplete();
[DispId(0x71)]
void TitleChange([In] string text);
[DispId(0x70)]
void PropertyChange([In] string szProperty);
[DispId(250)]
void BeforeNavigate2([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL, [In] ref object flags, [In] ref object targetFrameName, [In] ref object postData, [In] ref object headers, [In, Out] ref bool cancel);
[DispId(0xfb)]
void NewWindow2([In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object pDisp, [In, Out] ref bool cancel);
[DispId(0xfc)]
void NavigateComplete2([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL);
[DispId(0x103)]
void DocumentComplete([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL);
[DispId(0xfd)]
void OnQuit();
[DispId(0xfe)]
void OnVisible([In] bool visible);
[DispId(0xff)]
void OnToolBar([In] bool toolBar);
[DispId(0x100)]
void OnMenuBar([In] bool menuBar);
[DispId(0x101)]
void OnStatusBar([In] bool statusBar);
[DispId(0x102)]
void OnFullScreen([In] bool fullScreen);
[DispId(260)]
void OnTheaterMode([In] bool theaterMode);
[DispId(0x106)]
void WindowSetResizable([In] bool resizable);
[DispId(0x108)]
void WindowSetLeft([In] int left);
[DispId(0x109)]
void WindowSetTop([In] int top);
[DispId(0x10a)]
void WindowSetWidth([In] int width);
[DispId(0x10b)]
void WindowSetHeight([In] int height);
[DispId(0x107)]
void WindowClosing([In] bool isChildWindow, [In, Out] ref bool cancel);
[DispId(0x10c)]
void ClientToHostWindow([In, Out] ref int cx, [In, Out] ref int cy);
[DispId(0x10d)]
void SetSecureLockIcon([In] int secureLockIcon);
[DispId(270)]
void FileDownload([In, Out] ref bool cancel);
[DispId(0x10f)]
void NavigateError([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object URL, [In] ref object frame, [In] ref object statusCode, [In, Out] ref bool cancel);
[DispId(0xe1)]
void PrintTemplateInstantiation([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp);
[DispId(0xe2)]
void PrintTemplateTeardown([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp);
[DispId(0xe3)]
void UpdatePageStatus([In, MarshalAs(UnmanagedType.IDispatch)] object pDisp, [In] ref object nPage, [In] ref object fDone);
[DispId(0x110)]
void PrivacyImpactedStateChange([In] bool bImpacted);
[DispId(0x111)]
void NewWindow3([In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object pDisp, [In, Out] ref bool cancel, [In] int dwFlags, [In] ref object bstrUrlContext, [In] ref object bstrUrl);
}
关于c# - 使用 WebBrowser 获取弹出信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639398/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!