确定OnBeforeNavigate2源

时间:2016-04-06 22:45:00

标签: c++builder twebbrowser tembeddedwb

对于单个文档,

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。如果以上是解决方案。或者如果不是 - 了解如何确定frame或iframe是触发此事件还是用户点击的方法。

更新:(对于未来的googlers)

我找到了其他一些解决方案:

bool IsFrame = (EmbeddedWB->ControlInterface != pDisp);

原帖 - How do I avoid the OnDocumentComplete event for embedded iframe elements?

1 个答案:

答案 0 :(得分:1)

试试这个:

IST