1

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 是否触发了此事件或用户点击的方法。

更新:(对于未来的谷歌人)

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

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

原始帖子 -如何避免嵌入 iframe 元素的 OnDocumentComplete 事件?

4

1 回答 1

1

尝试这个:

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));
    ...
}
于 2016-04-07T23:05:22.837 回答