2016-04-06 23 views
1

OnBeforeNavigate2 olay, tek bir belge için birden çok kez oluşur. Yüklediğim belge iframe içeriyor, böylece OnBeforeNavigate2 olayını birden çok kez tetikler.OnBeforeNavigate2 kaynağının belirlenmesi

Yapmak istediğim, hangi kareyi tetiklediğini bulmak ve çerçeve tetiklendiğinde gezinmeyi iptal etmek ve kullanıcı tıklamasını değil.

ben çerçeve kaynağını belirlemeye pDisp parametre işlemek gerektiğini biraz eminim ve NULL ebeveyn ile veya tarayıcı ebeveyn ile ise - kod böyle bir şey yapacağını:

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); 
... 
} 

ben yardıma ihtiyacım Yukarıdakileri bulmak ve C++ Builder'a çeviri yapmak. Yukarıdaki çözüm ise. Ya da değilse - çerçevenin veya iframe'nin bu olayı tetikleyip tetiklemediğini veya kullanıcı tıklamasının nasıl belirleneceğini anlamanın yolu. How do I avoid the OnDocumentComplete event for embedded iframe elements?

cevap

1

bu deneyin -

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

Orijinal Mesaj:

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)); 
    ... 
} 
+0

Tanklarının

Güncelleme: (gelecek Google'cuların için)

bu konuya başka çözümler bulundu Cevabınız için - benim için işe yaramadı ama Başka biri için olabilir, yine de başka bir çözüm buldum ve sorunu güncelledim. Bunun da '_di_IWebBrowser2' arayüzünü kullanması gerektiğini düşünüyorum. – Coder12345

İlgili konular