确定 OnBeforeNavigate2 源
Determining OnBeforeNavigate2 source
OnBeforeNavigate2
事件在单个文档中发生多次。我正在加载的文档包含 iframe
,因此会多次触发 OnBeforeNavigate2
事件。
我想做的是弄清楚哪个框架触发了它,如果框架触发了导航,而不是用户单击,则取消导航。
我有点确定我需要处理 pDisp
参数来确定框架源,如果它是 NULL 父级或浏览器父级 - 代码会做类似的事情:
void __fastcall TForm1::EmbeddedWBBeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
OleVariant &URL, OleVariant &Flags, OleVariant &TargetFrameName, OleVariant &PostData,
OleVariant &Headers, WordBool &Cancel)
{
// This code is supposed to do that... (not in C++)
//var thisBrowser = pDisp as SHDocVw.WebBrowser;
//var parent = thisBrowser.Parent as SHDocVw.WebBrowser;
//bool isFrame = (parent == thisBrowser || parent == null);
...
}
我需要帮助来弄清楚以上内容并将其转换为 C++ Builder。如果以上是解决方案。或者,如果不是 - 弄清楚如何确定框架或 iframe 是否触发了此事件或用户单击的方法。
更新:(针对未来的 google 员工)
我找到了一些其他解决方案:
bool IsFrame = (EmbeddedWB->ControlInterface != pDisp);
原始 post - How do I avoid the OnDocumentComplete event for embedded iframe elements?
试试这个:
void __fastcall TForm1::EmbeddedWBBeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
OleVariant &URL, OleVariant &Flags, OleVariant &TargetFrameName, OleVariant &PostData,
OleVariant &Headers, WordBool &Cancel)
{
_di_IWebBrowser thisBrowser = pDisp;
_di_IWebBrowser parent = thisBrowser->Parent;
bool isFrame = ((!parent) || (parent == thisBrowser));
...
}
OnBeforeNavigate2
事件在单个文档中发生多次。我正在加载的文档包含 iframe
,因此会多次触发 OnBeforeNavigate2
事件。
我想做的是弄清楚哪个框架触发了它,如果框架触发了导航,而不是用户单击,则取消导航。
我有点确定我需要处理 pDisp
参数来确定框架源,如果它是 NULL 父级或浏览器父级 - 代码会做类似的事情:
void __fastcall TForm1::EmbeddedWBBeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
OleVariant &URL, OleVariant &Flags, OleVariant &TargetFrameName, OleVariant &PostData,
OleVariant &Headers, WordBool &Cancel)
{
// This code is supposed to do that... (not in C++)
//var thisBrowser = pDisp as SHDocVw.WebBrowser;
//var parent = thisBrowser.Parent as SHDocVw.WebBrowser;
//bool isFrame = (parent == thisBrowser || parent == null);
...
}
我需要帮助来弄清楚以上内容并将其转换为 C++ Builder。如果以上是解决方案。或者,如果不是 - 弄清楚如何确定框架或 iframe 是否触发了此事件或用户单击的方法。
更新:(针对未来的 google 员工)
我找到了一些其他解决方案:
bool IsFrame = (EmbeddedWB->ControlInterface != pDisp);
原始 post - How do I avoid the OnDocumentComplete event for embedded iframe elements?
试试这个:
void __fastcall TForm1::EmbeddedWBBeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
OleVariant &URL, OleVariant &Flags, OleVariant &TargetFrameName, OleVariant &PostData,
OleVariant &Headers, WordBool &Cancel)
{
_di_IWebBrowser thisBrowser = pDisp;
_di_IWebBrowser parent = thisBrowser->Parent;
bool isFrame = ((!parent) || (parent == thisBrowser));
...
}