在组件中加载的网页的 iFrame 中加载的某些网页WebBrowser
在关闭网页时会弹出确认窗口。这个确认窗口阻止了主网页关闭,所以我必须点击离开页面的选项。我想通过更改onbeforeunload
在 iFrame 中加载的网页的事件来避免这种情况。
我已尝试修改此解决方案并将其应用于我的案例。但是,该解决方案似乎仅在访问加载到内部的页面事件时才适用WebBrowser
,而不是在其中的 iFrame 事件时适用。
所以这就是我尝试过的。
我首先从上述解决方案中声明了接口:
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("00020400-0000-0000-C000-000000000046")]
public interface IDispatch
{
[PreserveSig]
int GetTypeInfoCount(out int Count);
[PreserveSig]
int GetTypeInfo(
[MarshalAs(UnmanagedType.U4)] int iTInfo,
[MarshalAs(UnmanagedType.U4)] int lcid,
out ITypeInfo typeInfo
);
[PreserveSig]
int GetIDsOfNames(
ref Guid riid,
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)] string[] rgsNames,
int cNames,
int lcid,
[MarshalAs(UnmanagedType.LPArray)] int[] rgDispId
);
[PreserveSig]
int Invoke(
int dispIdMember,
ref Guid riid,
uint lcid,
ushort wFlags,
ref System.Runtime.InteropServices.ComTypes.DISPPARAMS pDispParams,
out object pVarResult,
ref System.Runtime.InteropServices.ComTypes.EXCEPINFO pExcepInfo,
IntPtr[] pArgErr
);
}
然后,我想将onbeforeunload
事件设置为null
或以某种方式删除它的内容,以便弹出窗口不会...弹出。
HTMLDocument document = (HTMLDocument)webBrowser2.Document.DomDocument;
// iFrame's id is "iF".
HTMLFrameElement frame = (HTMLFrameElement)document.getElementById("iF");
IHTMLWindow2 window = frame.contentWindow;
// Everything works fine until the following line.
var event = (ExtendedWebBrowser.IDispatch)window.onbeforeunload;
// Although no exception is thrown, event variable is always null, no matter if the webpage in the iFrame has or does not have onbeforeunload event specified.
// Setting the event to null does nothing. I'd have to come up with how to read this event before trying to set it to something.
window.onbeforeunload = null;
所以我的最后一个问题是:如何获取和设置在 WebBrowser 控件中加载的网页的 iFrame 内加载的网页的 onbeforeunload 事件(或任何其他事件)?
随时要求任何进一步的解释。提前致谢。
编辑:
应用程序的进一步解释。
应用程序按顺序导航到网页列表。每一页处理完后,需要关闭,加载下一个。每个网页都有一个 iframe,它反过来从不同的域加载网页。我对应用程序没有任何问题,除非在 iframe 内加载的网页调用confirm
或popup
在其onbeforeunload
事件中。确认弹出框阻止应用程序处理更多网页。我需要摆脱这个弹出确认窗口。